HDU 5311

时间:2023-03-09 06:29:07
HDU 5311

把anniversary分成三个区间,分别枚举每个区间在给定模板中的长度。每次枚举完一个区间,记录下区间长度和起始坐标,下次从剩下长度开始枚举,避免重复。

 #include<iostream>
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXD = ;
const int MAXM = ;
const int INF = 0x3f3f3f3f;
typedef long long ll; int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
char str[];
char *str2;
while(T--)
{
int flag=;
char a1[];
char a2[];
char a3[];
int len1;
int len2;
int len3;
char *b1,*b2,*b3;
scanf("%s",str);
str2="anniversary";
int len=strlen(str2);
for(int i=; i<len-; i++)
{
if(flag)
break;
for(int j=i+; j<len-; j++)
{
memset(a1,,sizeof(a1));
memset(a2,,sizeof(a2));
memset(a3,,sizeof(a3));
strncpy(a1,str2+,i+);
b1=strstr(str,a1);
if(b1==NULL)
continue;
len1=b1-str;
strncpy(a2,str2+i+,j-i);
b2=strstr(str+len1+i+,a2);
if(b2==NULL)
continue;
len2=b2-str;
strncpy(a3,str2+j+,len-j+);
b3=strstr(str+len2+j-i,a3);
if(b3==NULL)
continue;
flag=;
break;
}
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return ;
}