您的位置:首页 > 其它

Hidden String(模拟)

2015-07-26 12:36 267 查看
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. 1≤l1≤r1<l2≤r2<l3≤r3≤n

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 (1≤T≤100),
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

2
annivddfdersewwefary
nniversarya




Sample Output

YES
NO




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 1000010
using 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: