HDU 5311:Hidden String【字符串】

来源:互联网 发布:算法导论难吗 编辑:程序博客网 时间:2024/05/21 08:27

Hidden String

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 1738    Accepted Submission(s): 612


Problem Description
Today is the 1st anniversary of BestCoder. Soda, the contest manager, gets a strings of length n. He wants to find three nonoverlapping substrings s[l1..r1],s[l2..r2],s[l3..r3] that:

1. 1l1r1<l2r2<l3r3n

2. The concatenation of s[l1..r1],s[l2..r2],s[l3..r3] is "anniversary".
 

Input
There are multiple test cases. The first line of input contains an integerT(1T100), indicating the number of test cases. For each test case:

There's a line containing a string s(1|s|100) consisting of lowercase English letters.
 

Output
For each test case, output "YES" (without the quotes) if Soda can find such thress substrings, otherwise output "NO" (without the quotes).
 

Sample Input
2annivddfdersewwefarynniversarya
 

Sample Output
YESNO
 暴力,把字符串anniversary分成三段,枚举每段的长度,分析是否有符合条件的。。。
AC-code:
#include<cstdio>#include<cstring>int main(){int T,i,j,flag,l;char s[105],str[]="anniversary";scanf("%d",&T);getchar();while(T--){gets(s);l=strlen(s);int flag=0;for(i=0;i<=8;i++){for(j=i+1;j<=9;j++){int k=0;while(k<l&&strncmp(s+k,str,i+1)!=0)k++;if(k==l)break;k+=i+1;while(k<l&&strncmp(s+k,str+i+1,j-i)!=0)k++;if(k==l)break;k+=j-i;while(k<l&&strncmp(s+k,str+j+1,10-j)!=0)k++;if(k!=l){flag=1;break;}}if(flag)break;}if(flag)puts("YES");else puts("NO");}return 0;}


1 0