Excuses, Excuses! Time Limit: 1000MSMemory Limit: 10000K Total Submissions: 4346Accepted: 1497 D

来源:互联网 发布:excel数据库功能 编辑:程序博客网 时间:2024/06/05 04:12
  1. # include <stdio.h>  
  2. # define check(t)  (t<'a'||t>'z')&&(t<'A'||t>'Z')  
  3. # define N 70  
  4. # define M 20  
  5. # define MAX(a,b) (a)>(b)?(a):(b)  
  6. int CMP(char a,char b){  
  7.    return  a==b||b==a+32||a==b+32;  
  8. }  
  9. int BF(char a[],char b[]){//a中如果有b这个单词返回1 否则返回0  
  10.     int i=0,j=0;  
  11.     do{  
  12.         if (b[j]&&CMP(a[i++],b[j]))++j;//若a[i]与b[j]相等或是大小写关系 继续比较  
  13.         else{  
  14.            if(!b[j])  
  15.            {//如果b字符串到头了 此时需要检查 b在a字符串是否为完整的单词  
  16.            if((i!=j)&&check(a[i-j-1])||(i==j))//i==j时 b在a字符串的串首  如果不在串首,则i!=j 此时应检查a[i-j-1]  
  17.            if(!a[i]||a[i]&&check(a[i]))//如果b在a字符串的串尾 则a[i]==0  如果不在末尾 则检验 a[i]  
  18.                 return 1;//此时b在a里是个完整的单词 返回1  
  19.            }  
  20.            else i-=j;  
  21.             j=0;  
  22.         }  
  23.     }while(a[i-1]);  
  24.         return 0;//检查完没有返回0  
  25. }  
  26. char A[M][M+1],B[M][N+1];  
  27. int n,m,s[20],i,j,max,t;  
  28. int main(){  
  29.      //freopen("AAA.txt","r",stdin);  
  30.      while(scanf("%d %d ",&n,&m)!=EOF){  
  31.          for(i=0;i<n;i++)  
  32.             gets(A[i]);//主串  
  33.          for(i=0,max=0;i<m;i++)  
  34.          {  
  35.              s[i]=0;  
  36.              gets(B[i]);//次串  
  37.              for(j=0;j<n;j++)  
  38.                  s[i]+=BF(B[i],A[j]);//记录句子中的符合单词  
  39.                  max=MAX(max,s[i]);//记录最大值  
  40.          }  
  41.          printf("Excuse Set #%d\n",++t);  
  42.          for(i=0;i<m;i++)  
  43.            if(s[i]==max)puts(B[i]);//和最大值相同的都输出  
  44.          printf("\n");  
  45.      }  
  46. return 0;  

阅读全文
0 0