Hidden String(模拟)

来源:互联网 发布:域名访问升级访问 编辑:程序博客网 时间:2024/04/28 19:52


Link:http://acm.hdu.edu.cn/showproblem.php?pid=5311


Hidden String

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


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 ($)
 


AC code:

<span style="font-size:18px;">#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<cstdio>#include<queue>#include<map>#include<vector>#define LL long long#define MAXN 1000010using namespace std;int num[MAXN];LL ans=0;string ss="anniversary";string s,s1,s2,s3;int len_s,len_ss,fg;// find()函数的功能是从std::string对象的头部顺序找目标值,//如果找到返回该目标值出现的位置,如果没有在//字符串对象中找到目标对象,返回值为-1。int main(){int T,i,j,k;//freopen("D:\in.txt","r",stdin);scanf("%d",&T);while(T--){cin>>s;len_s=s.length();len_ss=ss.length();fg=0;for(i=1;i<=len_ss-2;i++)//第一个字符串的长度{for(j=1;j<=len_ss-i-1;j++)//第一个字符串的长度{k=len_ss-i-j;//第三个字符串的长度s1=ss.substr(0,i);s2=ss.substr(i,j);s3=ss.substr(j+i,k);int st1=s.find(s1,0);if(st1==-1)continue;int st2=s.find(s2,st1+i);if(st2==-1)continue;int st3=s.find(s3,st2+j);if(st3==-1)continue;fg=1;//printf("st1=%d,st2=%d,st3=%d\n",st1,st2,st3);printf("YES\n");break;}if(fg)break;}if(!fg)printf("NO\n");}return 0; } </span>


0 0
原创粉丝点击