您的位置:首页 > 其它

HDU 5311 Hidden String (DFS)

2016-07-28 20:44 417 查看

Hidden String

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

Total Submission(s): 1884    Accepted Submission(s): 677


[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

 

[align=left]Source[/align]
BestCoder 1st Anniversary ($)

 

[align=left]Recommend[/align]
hujie   |   We have carefully selected several similar problems for you:  5775 5774 5773 5772 5771 
 
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char str[1100],s[13]={"anniversary"};
int l,flag;
void dfs(int b1,int b2,int num)
{
if(num<=3&&b2>=11)
{
flag=1;
return ;
}
if(num>3)
return ;
if(b1>=l||flag)
return ;
for(int i=b1;i<l;i++)
{
int x=i;
int y=b2;
while(str[x]==s[y]&&x<l&&y<11)
{
x++;
y++;
}
dfs(x+1,y,num+1);
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(str,'\0',sizeof(str));
scanf("%s",str);
l=strlen(str);
flag=0;
dfs(0,0,0);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: