您的位置:首页 > 其它

HDOJ 5311 Hidden String(枚举)

2015-12-07 18:44 337 查看

Hidden String

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)

Total Submission(s): 1715    Accepted Submission(s): 604

[align=left]Problem Description[/align]
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".
 

[align=left]Input[/align]
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.
 

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

[align=left]Sample Input[/align]

2
annivddfdersewwefary
nniversarya

 

[align=left]Sample Output[/align]

YES
NO

 

题意:在给出的串中是否存在三个子串可以连接成anniversary,且这三个串在给出的串中的位置是依序的不存在重叠。

一直想着KMP怎么搞,原来给出串长度才100,暴力就行了。先在anniversary串中枚举三个子串,再在给出的串中按序查找是否存在这些串就行了,简直水题,我真是智障。。。

代码如下:

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
string s="anniversary";
string str,s1,s2,s3;
int len_s,len_str;
int main()
{
int sign,t,i,j,k;
scanf("%d",&t);
while(t--)
{
cin>>str;
len_s=s.length();
len_str=str.length();
sign=0;
for(i=1;i<=len_s-2;++i)//i表示第一个串的长度
{
for(j=1;j<=len_s-1-i;++j)//j表示第二个串的长度
{
k=len_s-i-j;//k表示第三个串的长度
s1=s.substr(0,i);//从0位开始往后截取i长度的串
s2=s.substr(i,j);
s3=s.substr(j+i,k);
int st1=str.find(s1,0);//从第0位开始找s1,找到返回s1串存在的地址,找不到返回-1
if(st1==-1)//第一个串错误了,直接跳出确定第二个串的循环
break;
int st2=str.find(s2,st1+i);
if(st2==-1)
continue;
int st3=str.find(s3,st2+j);
if(st3==-1)
continue;
sign=1;
printf("YES\n");
break;
}
if(sign)
break;
}
if(!sign)
printf("NO\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: