标签:
题意:给一个字符串s,问s中先后出现的三个子串能否组成“anniversary”
解析:深搜,搜的层次小于等于三并且找到完整字符“anniversary”即正确,否则错误
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int maxn = 1e6; char s[105]; int n; char m[]={"anniversary"}; bool dfs(int d,int st1,int st2) //d表示当前搜索的层次,st1表示当前从s串的st1位置开始查找,st2表示当前从“anniversary”的st2位置开始查找 { if(st2==11) return true; //找到完整序列且之前的搜索层次小于等于3,返回true if(d>=4) return false; //搜索三次还没找到,返回false int tmp1,tmp2; for(int i=st1;i<n;i++) { tmp2=st2; tmp1=i; if(s[i]==m[st2]){ while(s[tmp1]==m[tmp2]&&tmp1<n&&tmp2<11){ tmp1++; tmp2++; } if(dfs(d+1,tmp1,tmp2)) return true; } } return false; } int main() { int t; scanf("%d",&t); while(t--){ scanf("%s",s); n=strlen(s); if(dfs(1,0,0)) printf("YES\n"); else printf("NO\n"); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
BestCoder 1st Anniversary ($) Hidden String(深搜)
标签:
原文地址:http://blog.csdn.net/sin_xf/article/details/47065269