uva409--String

来源:互联网 发布:晋中网络教研平台登录 编辑:程序博客网 时间:2024/05/16 15:06

这个比较简单,但是感觉思路很好~

//#define LOCAL#include <stdio.h>#include <string.h>#include <ctype.h>#define MAXN 20 + 10#define MAX 70 + 10char keyWords[MAXN][MAX];char excuses[MAXN][MAX]; int matchedNumber[MAXN];int bruteForce();int max(int , int);int nubmerOfKeyWords;int numberOfExcuses;int main(){#ifdef LOCALfreopen("input.txt", "r", stdin);//freopen("output.txt", "w", stdout);#endifint i, j;char c;int cases = 0;while(scanf("%d%d", &nubmerOfKeyWords, &numberOfExcuses) != EOF){// 数据初始化memset(matchedNumber, 0, sizeof(matchedNumber)); cases++;// 数据输入c = getchar(); for(i = 0; i < nubmerOfKeyWords; i++){gets(keyWords[i]);}for(i = 0; i < numberOfExcuses; i++){gets(excuses[i]);}// 算法主体// 暴搜int maxResult = bruteForce();// 数据输出printf("Excuse Set #%d\n", cases); for(i = 0; i < numberOfExcuses; i++) if(matchedNumber[i] == maxResult) { printf("%s\n", excuses[i]); } printf("\n");}return 0;}int bruteForce(){int i, j, k;int maxResult = 0;int d = 0;char word[MAX];for(i = 0; i < numberOfExcuses; i++){for(j = 0; j < strlen(excuses[i]); j++){if(isalpha(excuses[i][j])){word[d++] = tolower(excuses[i][j]); }else{word[d] = '\0';d = 0;for(k = 0; k < nubmerOfKeyWords; k++){if(strcmp(keyWords[k], word) == 0)matchedNumber[i]++;}}}maxResult = max(matchedNumber[i], maxResult);}return maxResult;}int max(int a, int b){if(a > b)return a;elsereturn b;}