Today is the 1st anniversary of BestCoder. Soda, the contest manager, gets a string s of length
1≤l1≤r1<l2≤r2<l3≤r3≤n
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
There’s a line containing a string s
Output
For each test case, output “YES” (without the quotes) if Soda can find such thress substrings, otherwise output “NO” (without the quotes).
题解
这么简单的题,粗心的我WA了几发QAQ
代码如下
#include<stdio.h>
#include<string.h>
char S[]="anniversary";
char s[120];
int L=strlen(S);
int len;
bool dfs(int cnt,int s_i,int S_i){
if(S_i==L&&cnt>=0) return true;
if(s_i==len||cnt<0) return false;
for(int i=s_i;i<len;i++){
if(s[i]==S[S_i])
if(dfs(cnt+(i>s_i?-1:0),i+1,S_i+1))
return true;
}
return false;
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
scanf("%s",s+1);
len=strlen(s+1)+1;
puts(dfs(3,0,0)?"YES":"NO");
}
return 0;
}
本文介绍了一个字符串匹配的问题,即在一串给定的字符中寻找三个不重叠的子串,使得它们连接起来能构成特定字符串“anniversary”。文章提供了一种递归深度优先搜索的解决方案,并通过多个测试案例验证了其正确性。
208

被折叠的 条评论
为什么被折叠?



