话题分析
提交网站:https://hihocoder.com/problemset/problem/1981
时间限制:5000ms
单点时限:1000ms
内存限制:256MB
描述
小Hi需要分析一篇文章同哪些话题相关。他预设了M个话题,其中第i个话题包含Ci个关键词。
这些关键词每在文章中出现一次,文章在对应的话题上的"得分"就会加1。
小Hi想知道这篇文章在每个话题上的得分是多少。
输入
第一行包含一个整数M。
第二行包含M个整数C1, C2, ... CM。
以下M行,第i行包含Ci个单词,代表第i个话题的关键词。每个单词都只包含小写字母,单词之间用空格隔开。
最后一行包含一个字符串,代表文章。字符串只包含小写字母组成的单词和空格。
1 <= M <= 10 1 <= Ci <= 100
输入中出现的所有单词长度不超过20,不同的话题不会包含相同的关键词。
注意一个关键词作为一个单独的单词在文章中才被视为"出现"一次。 比如"ball"不被视为在"we play football"中出现。
输出
输出M行,每行一个整数。第i行代表文章在第i个话题上的"得分"。
样例输入
2
3 3
sunny rain cloudy
xbox dota rpg
play xbox dota rpg rain
样例输出
1
3
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int n;
scanf("%d",&n);
int num[n],i,j,p,k,accum[n],l=0;
char data[n][101][21],map[101][21];
for(i=0;i<n;i++)
scanf("%d",&num[i]);
for(i=0;i<n;i++)
for(j=0;j<num[i];j++)
scanf("%s",data[i][j]);
getchar();
int flag=1;
for(p=0;p<100;p++)
{
char temp[21];
for(i=0;i<=20;i++)
{
scanf("%c",&temp[i]);
if(temp[i]==‘ ‘)
break;
else if(temp[i]==‘\n‘)
{
flag=0;
break;
}
}
strcpy(map[p],temp);
map[p][i]=‘\0‘;
if(flag==0)break;
}
for(i=0;i<n;i++)
{
l=0;
for(j=0;j<num[i];j++)
{
for(k=0;k<=p;k++)
{
if(strcmp(data[i][j],map[k])==0)
l++;
}
}
accum[i]=l;
}
for(i=0;i<n;i++)
printf("%d\n",accum[i]);
return 0;
}
原文:https://www.cnblogs.com/yunners/p/13070468.html