hdu 5311 Hidden String 字符串

BC一周年的题,这道题做比赛的时候A了小数据,最终评判的时候还是挂了,看来还是不认真思考的问题啊,交的时候

都没有信心过肯定是不行的,认真思考,敲一发,有信心过才是真正的acmer,赛后认真想了想,发现了好多bug,我

用的3层循环暴力做的,认真思考后敲的,认真思考后敲的,认真思考后敲的(重要的事说三遍)

贴代码:

#include<stdio.h>#include<stdlib.h>#include<string.h>char a[105];char b[20]="anniversary";int main(){int t,p,i,j,x,k,flag,kk,kkk;scanf("%d",&t);while(t–){flag = 0;memset(a,sizeof(a),'\0');scanf("%s",a);int len = strlen(a);for(i=0; i<len; i++){k =0;if(a[i] == b[k]){p = i+1;k = 1;while(a[p]==b[k]&&a[p]!='\0'&&b[k]!='\0'){p++;k++;}if(k==11){printf("YES\n");flag = 1;}if(flag == 1){break;}for(j=p+1; j<len; j++){kk = k;if(a[j] == b[kk]){p = j+1;kk++;while(a[p]==b[kk]&&a[p]!='\0'&&b[kk]!='\0'){p++;kk++;}if(kk==11){printf("YES\n");flag = 1;break;}for(x=p+1; x<len; x++){kkk = kk;if(a[x] == b[kkk]){p = x+1;kkk++;while(a[p]==b[kkk]&&a[p]!='\0'&&b[kkk]!='\0'){p++;kkk++;}if(kkk == 11){printf("YES\n");flag = 1;break;}}}if(flag == 1 )break;}}if(flag == 1)break;}if(flag==1)break;}if(flag == 0){printf("NO\n");}} return 0;} 看了邓大师的代码后敲的,几乎一样。。。用的是dfs深搜,不过我感觉还没有三层循环更有效率,这个有可能出现搜了好多层的情况,可以加一个判断,就是cnt>=3的时候直接return 0,这种方法如果递归理解的好的话敲的比较快,,而且不容易出错的。。

上代码:

#include<stdio.h>#include<stdlib.h>#include<string.h>char a[105];char b[20]="anniversary";int lena,lenb = 11;int dfs(int a1,int b1,int cnt){if(cnt >= 3)return 0; int b2 = b1;int j;for(int i=a1; i<lena && b1<11; i++){b1 = b2;if(a[i] == b[b1]){for(j=i+1,b1++; j<lena && b1<11; j++,b1++){if(a[j] != b[b1]){break;}}if(b1==11 && cnt<=2)return 1;if(dfs(j,b1,cnt+1))return 1;}}return 0;}int main(){int T;scanf("%d",&T);while(T–){memset(a,'\0',sizeof(a));scanf("%s",a);lena = strlen(a);if(dfs(0,0,0))puts("YES");elseputs("NO");}return 0;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

会让你的心态更平和更坦然,也会让你心无旁骛,更会让你的心灵得到解脱和抚慰。

hdu 5311 Hidden String 字符串

相关文章:

你感兴趣的文章:

标签云: