- # include <stdio.h>
- # define check(t) (t<'a'||t>'z')&&(t<'A'||t>'Z')
- # define N 70
- # define M 20
- # define MAX(a,b) (a)>(b)?(a):(b)
- int CMP(char a,char b){
- return a==b||b==a+32||a==b+32;
- }
- int BF(char a[],char b[]){//a中如果有b这个单词返回1 否则返回0
- int i=0,j=0;
- do{
- if (b[j]&&CMP(a[i++],b[j]))++j;//若a[i]与b[j]相等或是大小写关系 继续比较
- else{
- if(!b[j])
- {//如果b字符串到头了 此时需要检查 b在a字符串是否为完整的单词
- if((i!=j)&&check(a[i-j-1])||(i==j))//i==j时 b在a字符串的串首 如果不在串首,则i!=j 此时应检查a[i-j-1]
- if(!a[i]||a[i]&&check(a[i]))//如果b在a字符串的串尾 则a[i]==0 如果不在末尾 则检验 a[i]
- return 1;//此时b在a里是个完整的单词 返回1
- }
- else i-=j;
- j=0;
- }
- }while(a[i-1]);
- return 0;//检查完没有返回0
- }
- char A[M][M+1],B[M][N+1];
- int n,m,s[20],i,j,max,t;
- int main(){
- //freopen("AAA.txt","r",stdin);
- while(scanf("%d %d ",&n,&m)!=EOF){
- for(i=0;i<n;i++)
- gets(A[i]);//主串
- for(i=0,max=0;i<m;i++)
- {
- s[i]=0;
- gets(B[i]);//次串
- for(j=0;j<n;j++)
- s[i]+=BF(B[i],A[j]);//记录句子中的符合单词
- max=MAX(max,s[i]);//记录最大值
- }
- printf("Excuse Set #%d\n",++t);
- for(i=0;i<m;i++)
- if(s[i]==max)puts(B[i]);//和最大值相同的都输出
- printf("\n");
- }
- return 0;
- }
Excuses, Excuses! Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4346 Accepted: 1497 D
最新推荐文章于 2020-06-23 16:49:16 发布