题目大意:
我的理解:
暴力。
我的code:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m; //n个关键词,m个句子
int num[40]; //用于存储一个句子中关键词的个数
char str[30][80]; //用于存储关键词
char s[30][100]; //用于存储句子
int cmp(char c){ //该函数用于从一个句子中解析出字母
if((c>='a' && c<='z') || (c>'A' && c<'Z')){
return 1;
}else{
return 0;
}
}
int main()
{
int maxn; //用于记录最跛脚的借口
int q = 1; //用于输出时的计数,看到最后就懂了
freopen("D:/OJ/挑战程序设计竞赛/POJ.txt","r",stdin);
while(scanf("%d%d", &n, &m) != EOF){
getchar(); //吸取一个字符
for(int i = 0;i<n;i++){
cin>>str[i]; //输入关键字
}
getchar(); //吸取一个字符
memset(num,0,sizeof(num)); //将num数组置零
maxn = 0;
for(int i = 0;i<m;i++){
char ch[100];
gets(s[i]); //输入句子
int len = strlen(s[i]); //这个句子的长度
for(int j = 0;j<len;j++){ //一直遍历到句子结束
int a = 0;
while(cmp(s[i][j])){ //从句子中解析出单词 ,遇到非字母将停止while循环
if(s[i][j] >= 'A' && s[i][j] <= 'Z'){
ch[a++] = s[i][j]+32;
}else{
ch[a++] = s[i][j];
}
j++;
}
if(a>0){ //如果a>0,代表已经解析到单词
int k;
ch[a] = '\0';
for(k = 0;k<n;k++){
if(strcmp(ch,str[k]) == 0){ //判断解析出的单词与关键词是否相等
break;
}
}
if(k < n){ //代表上面的for循环没有结束就跳出了,意思就是找到与关键词相同的单词了
num[i]++;
}
}
}
maxn = max(maxn,num[i]); //从这么多句子里选出含关键词最多的句子
}
cout<<"Excuse Set #"<<(q++)<<endl; //输出结果
for(int i = 0;i<m;i++){
if(num[i] == maxn)
cout<<s[i]<<endl;
}
cout<<endl;
}
return 0;
}