hdoj5311Hidden String

来源:互联网 发布:软件体系结构报告 编辑:程序博客网 时间:2024/05/22 02:16

Hidden String

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


Problem Description
Today is the 1st anniversary of BestCoder. Soda, the contest manager, gets a string s 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 integer T (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
 

Source
BestCoder 1st Anniversary ($)
 
解题思路先求出最长前缀再求最长后缀暴力枚举中间
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>using namespace std;char s[20]={"anniversary"};char str[110];int main(){int t,i,j,k;scanf("%d",&t);while(t--){scanf("%s",str);int len=strlen(str);int l=110,r=-1,l1=110,r1=0;for(i=0;i<len;++i){if(str[i]=='a'){for(j=i,k=0;j<len;++j){if(str[j]==s[k])k++;else break;}if(k-1>r){r=k-1;l1=j;}}if(str[len-i-1]=='y'){for(j=len-i-1,k=10;j>=0;--j){if(str[j]==s[k])k--;else break;}if(k+1<l){l=k+1;r1=j;}}}if(r+1>=l&&l1<=r1){printf("YES\n");}else {if(r==10||l==0){printf("YES\n");continue;}bool flag=false;for(j=l1;j<=r1;++j){if(str[j]==s[r+1]){k=r+1;for(int ss=j;ss<=r1;++ss){if(str[ss]==s[k])k++;else break;}if(k>=l){flag=true;break;}}}if(flag){printf("YES\n");}else {printf("NO\n");}}}return 0;}


0 0
原创粉丝点击