Hidden String
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 595 Accepted Submission(s): 225
Problem Description
Today is the 1st anniversary of BestCoder. Soda, the contest manager, gets a strings
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 integerT(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#include <stdio.h> #include <string.h> using namespace std; char str[110]; char s[] = "anniversary"; int len1 = strlen(s); int len; bool flag; bool DFS(int i,int j,int sum) { if(sum > 3) return false; int k; for(k=0;i+k<len&&j+k<len1;k++) { if(str[i+k] != s[j+k]) { for(int ans = i+k+1;ans<len;ans++) { if(str[ans] == s[j+k]) { flag = DFS(ans,j+k,sum+1); if(flag)return true; } } return false; } } if(j+k == len1 && sum<=3) return true; return false; } int main() { freopen("in.txt","r",stdin); int T; scanf("%d",&T); while(T--) { scanf("%s",str); len = strlen(str); if(len < len1) { printf("NO\n"); continue; } flag = false; for(int i=0;i<len;i++) { if(str[i] == s[0]) { flag = DFS(i,0,1); if(flag)break; } } if(flag) printf("YES\n"); else printf("NO\n"); } return 0; }

本文探讨了在给定字符串中查找三个不重叠子串的问题,这些子串的拼接形成目标字符串anniversary。通过代码实现,解决了如何在多测试案例下判断是否存在符合条件的子串。
2332

被折叠的 条评论
为什么被折叠?



