bzoj1622 / P2908 [USACO08OPEN]文字的力量Word Power
Posted kafuuchino
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ",ans); 31 }return 0; 32 }
以上是关于bzoj1622 / P2908 [USACO08OPEN]文字的力量Word Power的主要内容,如果未能解决你的问题,请参考以下文章
bzoj1622[Usaco2008 Open]Word Power 名字的能量*
BZOJ——1622: [Usaco2008 Open]Word Power 名字的能量
bzoj 1622: [Usaco2008 Open]Word Power 名字的能量模拟
BZOJ_1622_[Usaco2008_Open]_Word_Power_名字的能量_(字符匹配_暴力)