题目;http://acm.hdu.edu.cn/showproblem.php?pid=5455
题意就是找出所给字符串有多少个满足题目所给条件的子串,重复的也算,坑点是如果有c,f以外的字符也是不满足条件的,还有我被坑了的地方就是当输入很多f的时候,我尽然脑抽的
认为这是不满足条件的,注意这两点就行了,直接暴力
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 int main() 5 { 6 int t,i,j,x,y,k,z,sum,q,flag,zz; 7 char yj[1000001]; 8 scanf("%d",&t); 9 k=1; 10 getchar(); 11 while (t--) 12 { 13 sum=1; 14 gets(yj); 15 i=0;x=strlen(yj); 16 y=x-1;z=0;zz=0; 17 if (yj[0]==' '&&x==1) 18 { 19 printf("Case #%d: 0\n",k++); 20 continue; 21 } 22 while (yj[i]=='f'||yj[i]==' ') 23 { 24 if (yj[i]=='f') 25 zz++; 26 i++; 27 } 28 while (yj[y]=='f'||yj[y]==' ') 29 { 30 if (yj[y]=='f') 31 z++; 32 y--; 33 } 34 if (i==x) 35 { 36 printf("Case #%d: %d\n",k++,(x+1)/2); 37 continue; 38 } 39 if (i+z<2||yj[i]!='c') 40 { 41 printf("Case #%d: -1\n",k++); 42 continue; 43 } 44 q=i;flag=0; 45 for (j=i+1;j<x;j++) 46 { 47 48 if (yj[j]=='c') 49 { 50 sum++; 51 if (j-q-1<2) flag=1; 52 q=j; 53 } 54 if (yj[j]!='c'&&yj[j]!='f'&&yj[j]!=' ') flag=1; 55 if (flag==1) break; 56 57 } 58 if (flag==1) printf("Case #%d: -1\n",k++); 59 else printf("Case #%d: %d\n",k++,sum); 60 } 61 62 return 0; 63 }