Hidden String
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1961 Accepted Submission(s): 731
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
#include<cstdio>
#include<iostream>
#include<cstring>
#define LL long long
using namespace std;
char s[110], m[20] = "anniversary";
bool solve(){
int c = strlen(s+1);
for(int i = 1; i <= 9; i++){//分为三段,i是一段,j-i是一段,11-j是一段
for(int j = i+1; j <= 10; j++){
int r = 1;
while(r <= c && strncmp(m, s+r, i)) r++;//检查第一段是否满足
if(r == c) continue;
r += i;
while(r <= c && strncmp(m+i, s+r, j-i)) r++;
if(r == c) continue;
r += j-i;
while(r <= c && strncmp(m+j, s+r, 11-j)) r++;
if(r <= c) return true;
}
}
return false;
}
int main(){
int t, n;
cin >> t;
while(t--){
cin >> s+1;
printf(solve() ? "YES\n" : "NO\n");
}
return 0;
}