题目;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 }

 

posted on 2015-09-22 19:39  蜘蛛侦探  阅读(394)  评论(0编辑  收藏  举报