HDU 1867 A + B for you again

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1867

题目大概意思就是 有重复的就覆盖掉 然后输出。不过这个得比较字符串str1 str2还得再比较str2 str1.

思路 KMP算法 掌握的还是不熟。

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #define N 100001
 5  int nextt[N];
 6  void next(char s[])
 7  {
 8      int i=1,j=0;
 9      int len=strlen(s);
10      nextt[0]=-1;
11      while(i<len)
12      {
13          if(j==-1||s[i]==s[j])
14          {
15              ++i;
16              ++j;
17              if(s[i]!=s[j])
18                  nextt[i]=j;
19              else
20                  nextt[i]=nextt[j];
21          }
22          else
23              j=nextt[j];
24      }
25  }
26  int kmp(char ss[],char s[])
27  {
28      int len1=strlen(ss);
29      int len2=strlen(s);
30      next(s);
31      int i=0,j=0;
32      while(i<len1&&j<len2)
33      {
34          if(j==-1||ss[i]==s[j])
35          {
36              ++i;
37              ++j;
38          }
39          else
40              j=nextt[j];
41      }
42      if(i==len1)
43          return j;
44      return 0;
45  }
46  int main()
47  {
48      char str1[N],str2[N];
49      while(~scanf("%s%s",str1,str2))
50      {
51          int x=kmp(str1,str2);
52          int y=kmp(str2,str1);
53          if(x==y)
54          {
55              if(strcmp(str1,str2)>0)
56              {
57                  printf("%s",str2);
58                  printf("%s\n",str1+x);
59              }
60              else
61              {
62                  printf("%s",str1);
63                  printf("%s\n",str2+x);
64              }
65          }
66          else if(x>y)
67          {
68              printf("%s",str1);
69              printf("%s\n",str2+x);
70          }
71          else
72          {
73              printf("%s",str2);
74              printf("%s\n",str1+y);
75          }
76      }
77      return 0;
78  }

 

posted @ 2012-08-03 18:48  时光旅行的懒猫  阅读(194)  评论(0编辑  收藏  举报