bzoj1622 / P2908 [USACO08OPEN]文字的力量Word Power

P2908 [USACO08OPEN]文字的力量Word Power

第一眼:AC自动机(大雾)

直接暴力枚举即可。

用<cctype>的函数较方便(还挺快)

$isalpha(a)$:$a$是否是字母

$tolower(a)$:$a$把a转成小写

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cctype>
 5 #define re register
 6 using namespace std;
 7 char a[1003][1003],b[103][33];
 8 int n,m,ans,c[103],lena[1003],lenb[103];
 9 int main(){
10     scanf("%d%d",&n,&m);
11     for(re int i=1;i<=n;++i){
12         char c=getchar();
13         while(!isalpha(c)) c=getchar();
14         while(isalpha(c)) a[i][lena[i]++]=tolower(c),c=getchar();
15     }
16     for(re int i=1;i<=m;++i){
17         char c=getchar();
18         while(!isalpha(c)) c=getchar();
19         while(isalpha(c)) b[i][lenb[i]++]=tolower(c),c=getchar();
20     }
21 //----读入字符串-------
22     for(re int i=1;i<=n;++i){
23         memset(c,0,sizeof(c)); ans=0;
24         for(re int j=0;j<lena[i];++j){
25             for(re int k=1;k<=m;++k){
26                 if(c[k]==-1) continue;
27                 if(b[k][c[k]]==a[i][j]) ++c[k];
28                 if(c[k]==lenb[k]) ++ans,c[k]=-1;//这个子串的字母全出现过了
29             }
30         }printf("%d\n",ans);
31     }return 0;
32 }
View Code

 

posted @ 2018-10-27 17:09  kafuuchino  阅读(139)  评论(0编辑  收藏  举报