题目链接:点击打开链接
Hidden String
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1958 Accepted Submission(s): 729
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".
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.
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一周年纪念日. 比赛管理员Soda有一个长度为n的字符串s. 他想要知道能否找到s的三个互不相交的子串s[l1..r1], s[l2..r2], s[l3..r3]满足下列条件: 1. 1≤l1≤r1<l2≤r2<l3≤r3≤n 2. s[l1..r1], s[l2..r2], s[l3..r3]依次连接之后得到字符串"anniversary".
输入描述
输入有多组数据. 第一行有一个整数T (1≤T≤100), 表示测试数据组数. 然后对于每组数据: 一行包含一个仅含小写字母的字符串s (1≤∣s∣≤100).
输出描述
对于每组数据, 如果Soda可以找到这样三个子串, 输出"YES", 否则输出"NO".
输入样例
2 annivddfdersewwefary nniversarya
输出样例
YES NO
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int len;
char str[110];
char a[]="anniversary";
bool dfs(int str_p,int a_p,int cnt)
{
if(cnt>3) return 0;
if(cnt<=3&&a_p>=11) return 1;
for(int i=str_p;i<len;i++)
{
int p1=i,p2=a_p;
while(str[p1]==a[p2]&&p1<len&&p2<11)
p1++,p2++;
if(p1>i&&dfs(p1,p2,cnt+1))
return 1;
}
return 0;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",str);
len=strlen(str);
if(dfs(0,0,0))
puts("YES");
else
puts("NO");
}
return 0;
}