给一段字符串,看看是否能分割成三个不相交的字符串组成“anniversary”
将每个字符的位置标记一下
最后暴力dfs一下就可以了
代码如下
#include<iostream> #include<algorithm> #include<cstring> #include<cmath> using namespace std; int place[130];char s[150];char S[200]; char biao[20]="anniversary"; int l,len; int dfs(int weizhi,int duanshu,int pipei,int last) { int i;l=strlen(s); // printf("%d %c\n",pipei,biao[pipei]); if(pipei==11&&duanshu<=3) { return 1; } for(i=weizhi;i<l;i++) { if(s[i]==biao[pipei]) { if(pipei==0) { if(dfs(i+1,1,1,i)) return 1; } else if(i==last+1) { if(dfs(i+1,duanshu,pipei+1,i)) return 1; } else if(i!=last+1) if(dfs(i+1,duanshu+1,pipei+1,i)) return 1; } } return 0; } int main() { int n;int i; scanf("%d",&n); while(n--) { getchar(); memset(s,'\0',sizeof(s)); memset(S,'\0',sizeof(S)); memset(place,0,sizeof(place)); scanf("%s",s); int l=strlen(s); len=strlen(S); if(l<11) { printf("NO\n");continue; } bool dd=false; for(i=0;i<l;i++) { if(s[i]=='a') { if(dfs(i,1,0,0)) dd=true; } } if(dd) printf("YES\n"); else printf("NO\n"); } return 0; } </cmath></cstring></algorithm></iostream>