Hidden String
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 803 Accepted Submission(s): 302
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
Recommend
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
char str[10001];
struct node
{
int x;
char s;
} q[10010];
int main()
{
int T;
char a[] = "anniversary";
scanf("%d",&T);
while(T--)
{
int flag = 0;
scanf("%s",str);
int l = strlen(str);
int ll = strlen(a);
int num = 0;
for(int j=0; j<l; j++)
{
for(int i=1; i<=ll; i++)
{
if(strncmp(str+j,a+num,i) == 0)
{
int num1 = num + i;
for(int jj=j+i; jj<l; jj++)
{
for(int ii=1; ii<=ll-i; ii++)
{
if(strncmp(str+jj,a+num1,ii) == 0)
{
int num2 = num1 + ii;
for(int jjj=jj+ii; jjj<l; jjj++)
{
if(strncmp(str+jjj,a+num2,ll-num2) == 0)
{
printf("YES\n");
flag = 1;
break;
}
}
}
if(flag == 1)
{
break;
}
}
if(flag == 1)
{
break;
}
}
if(flag == 1)
{
break;
}
}
if(flag == 1)
{
break;
}
}
if(flag == 1)
{
break;
}
}
if(flag == 0)
{
printf("NO\n");
}
}
return 0;
}