#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Info {
string s;
int count;
};
bool isNotAlphet(char ch) {
if(ch < 'a' || ch > 'z') return true;
else return false;
}
bool cmp(const Info &a, const Info &b) {
return a.count > b.count;
}
int main()
{
int n, m, count = 0;;
string s;
char str[80];
Info info;
vector<string> keywords;
vector<Info> excuses;
while(scanf("%d %d", &n, &m) != EOF) {
count ++;
keywords.clear();
excuses.clear();
for(int i = 0; i < n; i ++) {
cin >> s;
keywords.push_back(s);
}
getchar();
for(int i = 0; i < m; i ++) {
cin.getline(str, 80);
s = str;
for(int j = 0; j < s.size(); j ++) {
if(s[j] >= 'A' && s[j] <= 'Z') {//如果是大写字母则转换成小写字母
s[j] += 32;
}
}
int num = 0;
for(int j = 0; j < keywords.size(); j ++) {//找出每个关键字在该局中出现的次数
int site = 0;
while(s.find(keywords[j], site) < s.size()) {
int tmp = s.find(keywords[j], site);
if(tmp == 0) {//如果关键字在开头的位置
if(isNotAlphet(s[tmp + keywords[j].size()])) {
num ++;
}
}
else {
if(isNotAlphet(s[tmp - 1]) && isNotAlphet(s[tmp + keywords[j].size()])) {
num ++;
}
}
site = tmp + keywords[j].size();
if(site >= s.size()) break;
}
}
info.count = num;
info.s = str;
excuses.push_back(info);
}
sort(excuses.begin(), excuses.end(), cmp);
cout << "Excuse Set #" << count << endl;
for(int i = 0; i < excuses.size(); i ++) {
if(i == 0) {
cout << excuses[i].s << endl;
}
else {
if(excuses[0].count == excuses[i].count) {
cout << excuses[i].s << endl;
}
}
}
cout << endl;
}
return 0;
}
zoj1315
最新推荐文章于 2021-09-16 11:19:49 发布