網頁

2014年2月4日 星期二

UVa 409 Excuses, Excuses!

題意:
  給定K個關鍵字,和E個句字,分析每個句字含有多少個關鍵字,將關鍵字最多的句字輸出,如果有多個數量相同的句字,則全部都要輸出。

想法:
  將句子不是英文字母的字去掉,一個單字一個單字比對。本題輸出的時候包含最後一個Case都要有個空行。


#include <cstdio>
using namespace std;
int K,E;
char keyword[20][100],line[20][1000];
int analysis (int x)
{
int num = 0, p = 0;
char word[100];
while (1){
while (line[x][p]<'A' || line[x][p]>'Z' && line[x][p]<'a' || line[x][p]>'z') {
if (line[x][p] == '\0') break;
p++;
}
if (line[x][p] == '\0') break;
int i;
for (i=0; line[x][p]>='A'&&line[x][p]<='Z'||line[x][p]>='a'&&line[x][p]<='z'; i++)
word[i] = line[x][p++];
word[i] = '\0';
for (int i=0; i<K; i++){
int j=0,k=0;
for (; word[j] && keyword[i][k]; j++){
if (word[j]==keyword[i][k] || word[j]==keyword[i][k]-32) k++;
}
if (keyword[i][k]=='\0' && word[j]=='\0') num++;
}
}
return num;
}
int main()
{
freopen ("input.txt","rt",stdin);
int Case = 1;
while (scanf("%d%d",&K,&E)!=EOF)
{
for (int i=0; i<K; i++) scanf("%s",keyword[i]);
getchar();
int num[20],Max = 0;
for (int i=0; i<E; i++){
gets(line[i]);
num[i] = analysis(i);
if (num[i] > Max) Max = num[i];
}
printf("Excuse Set #%d\n",Case++);
for (int i=0; i<E; i++)
if (num[i] == Max)
puts(line[i]);
printf("\n");
}
return 0;
}

沒有留言:

張貼留言