Hidden String
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1950 Accepted Submission(s): 724
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
题意:在给出的字符串里能否找到三段不重叠的子串,使它们组成单词
"anniversary",能输出YES 不能输出NO
思路:数据到100 ,暴力枚举,使用string类方便些,每次枚举单词"anniversary"的三个子串,然后在给出的串里看能否找到
code
#include <iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string s,s1,s2,s3,str="anniversary";
int t;
scanf("%d",&t);
while(t--)
{
cin>>s;
int len_s=s.length();
int len_str=str.length();
int flag=0;
for(int i=1;i<=len_str-2;i++)
{
for(int j=1;j<=len_str-i-1;j++)
{
s1=str.substr(0,i);
s2=str.substr(i,j);
s3=str.substr(i+j,len_str-i-j);
int st1=s.find(s1,0);
if(st1==-1)
continue;
int st2=s.find(s2,st1+i);
if(st2==-1)
continue;
int st3=s.find(s3,st2+j);
if(st3==-1)
continue;
flag=1;
break;
}
if(flag)
break;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}