链接:点击打开链接
题意:输入一个字符串,看是否能找到三个没有重叠部分的连续子串组成“anniversary”这个字符串,并满足1≤l1≤rl<l2≤r2<l3≤r3≤n
1≤l1
≤r
1
<l
2
≤r
2
<l
3
≤r
3
≤n1≤l
1
≤r
1
<l
2
≤r
2
<l
3
≤r
3
≤n代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; char s[20]="anniversary"; char *judge(char str[],int l,int r){ //返回值为满足情况时的指针 char *p; int i,j,sign; while(*str){ p=str+1; sign=1; for(i=l;i<r&&sign;i++){ if(*str!=s[i]) sign=0; str++; } if(sign) return str; str=p; //不满足时str向后移动 } return NULL; } int main(){ char str[500],*p; int t,i,j,len,sign; cin>>t; while(t--){ cin>>str; len=11;sign=0; for(i=1;i<len;i++) for(j=1;i+j<len;j++){ p=judge(str,0,i); if(p)p=judge(p,i,i+j); if(p)p=judge(p,i+j,len); if(p)sign=1; } if(sign) puts("YES"); else puts("NO"); } return 0; }