Today is the 1st anniversary of BestCoder. Soda, the contest manager, gets a string ss of length nn. He wants to find three nonoverlapping substrings s[l_1..r_1]s[l1..r1], s[l_2..r_2]s[l2..r2], s[l_3..r_3]s[l3..r3] that:
-
1 \le l_1 \le r_1 < l_2 \le r_2 < l_3 \le r_3 \le n1≤l1≤r1<l2≤r2<l3≤r3≤n
-
The concatenation of s[l_1..r_1]s[l1..r1], s[l_2..r_2]s[l2..r2], s[l_3..r_3]s[l3..r3] is "anniversary".
There are multiple test cases. The first line of input contains an integer TT (1 \le T \le 100)(1≤T≤100), indicating the number of test cases. For each test case:
There's a line containing a string ss (1 \le |s| \le 100)(1≤∣s∣≤100) consisting of lowercase English letters.
For each test case, output "YES" (without the quotes) if Soda can find such thress substrings, otherwise output "NO" (without the quotes).
2 annivddfdersewwefary nniversarya
YESNO
暴力dfs即可
#include<cstdio> #include<cmath> #include<queue> #include<vector> #include<stack> #include<map> #include<string> #include<cstring> #include<algorithm> #include<iostream> using namespace std; typedef long long ll; const ll maxn = 205; int T, n, m, p, q, flag, f[maxn]; char s[maxn], c[maxn] = "anniversary"; void dfs(int x, int y, int z) { if (z <= 3 && !c[x]) { flag = 1; return; } if (z > 3 || !c[x] || !s[y]) return; dfs(x, y + 1, z); if (c[x]==s[y]) { while (c[x] && s[y] && c[x] == s[y]) x++, y++; dfs(x, y, z + 1); } } int main() { cin >> T; while (T--) { scanf("%s", s); flag = 0; dfs(0, 0, 0); if (flag) printf("YES\n"); else printf("NO\n"); } return 0; }