B. Hidden String
Time Limit: 1 Sec
Memory Limit: 256 MB
题目连接
http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=610&pid=1002
Description
今天是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".
Input
输入有多组数据. 第一行有一个整数T (1≤T≤100), 表示测试数据组数. 然后对于每组数据:
一行包含一个仅含小写字母的字符串s (1≤|s|≤100).
Output
对于每组数据, 如果Soda可以找到这样三个子串, 输出"YES", 否则输出"NO".
Sample Input
2 annivddfdersewwefary nniversarya
Sample Output
YES
NO
HINT
题意
题解:
DFS
代码
1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include <ctime> 5 #include <iostream> 6 #include <algorithm> 7 #include <set> 8 #include <vector> 9 #include <sstream> 10 #include <queue> 11 #include <typeinfo> 12 #include <fstream> 13 #include <map> 14 #include <stack> 15 typedef __int64 ll; 16 using namespace std; 17 18 typedef __int64 ll; 19 const int inf = (int)1E9+10; 20 inline ll read() 21 { 22 ll x=0,f=1; 23 char ch=getchar(); 24 while(ch<'0'||ch>'9') 25 { 26 if(ch=='-')f=-1; 27 ch=getchar(); 28 } 29 while(ch>='0'&&ch<='9') 30 { 31 x=x*10+ch-'0'; 32 ch=getchar(); 33 } 34 return x*f; 35 } 36 37 //******************************* 38 39 40 int T; 41 char s[1111]; 42 char s1[] = "anniversary"; 43 bool dfs(int num,int k,int i) 44 { 45 if(num >= 3) return 0; 46 while(s[k] != '