HDU 5311

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

 1 #include<iostream>

 2 #include<stdio.h>

 3 #include<string.h>

 4 #include<cmath>

 5 #include<algorithm>

 6 using namespace std;

 7 const int  MAXD = 50010;

 8 const int  MAXM = 200010;

 9 const int  INF = 0x3f3f3f3f;

10 typedef long long ll;

11 

12 int main()

13 {

14     //freopen("in.txt","r",stdin);

15     int T;

16     scanf("%d",&T);

17     char str[100];

18     char *str2;

19     while(T--)

20     {

21         int flag=0;

22         char a1[100];

23         char a2[100];

24         char a3[100];

25         int len1;

26         int len2;

27         int len3;

28         char *b1,*b2,*b3;

29         scanf("%s",str);

30         str2="anniversary";

31         int len=strlen(str2);

32         for(int i=0; i<len-2; i++)

33         {

34             if(flag)

35                 break;

36             for(int j=i+1; j<len-1; j++)

37             {

38                 memset(a1,0,sizeof(a1));

39                 memset(a2,0,sizeof(a2));

40                 memset(a3,0,sizeof(a3));

41                 strncpy(a1,str2+0,i+1);

42                    b1=strstr(str,a1);

43                 if(b1==NULL)

44                     continue;

45                 len1=b1-str;

46                 strncpy(a2,str2+i+1,j-i);

47                 b2=strstr(str+len1+i+1,a2);

48                 if(b2==NULL)

49                     continue;

50                     len2=b2-str;

51                 strncpy(a3,str2+j+1,len-j+1);

52                 b3=strstr(str+len2+j-i,a3);

53                 if(b3==NULL)

54                     continue;

55                     flag=1;

56                     break;

57             }

58         }

59         if(flag)

60             cout<<"YES"<<endl;

61         else

62             cout<<"NO"<<endl;

63     }

64     return 0;

65 }

 

你可能感兴趣的:(HDU)