BestCoder 1st Anniversary ($) Hidden String(深搜)

题意:给一个字符串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,返回trueif(d>=4) return false;//搜索三次还没找到,,返回falseint 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(深搜)

相关文章:

你感兴趣的文章:

标签云: