HDU 5311 Hidden String

来源:互联网 发布:js frame 高度 编辑:程序博客网 时间:2024/05/17 07:55
Problem Description

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. 1 \le l_1 \le r_1 < l_2 \le r_2 < l_3 \le r_3 \le n1l1r1<l2r2<l3r3n

  2. 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".

Input

There are multiple test cases. The first line of input contains an integer TT (1 \le T \le 100)(1T100), indicating the number of test cases. For each test case:

There's a line containing a string ss (1 \le |s| \le 100)(1s100) 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
2annivddfdersewwefarynniversarya
Sample Output
YES

NO

暴力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;}


0 0
原创粉丝点击