码迷,mamicode.com
首页 > 其他好文 > 详细

hdu--1867--kmp<kmp,怪我太sb>

时间:2014-08-15 22:25:59      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   ar   

这题 做的时候 肯定自己短路了...

一开始 拿到手  思考了下 我就想 暴力做了...

我是想到kmp了  但我考虑错了 对于跳出循环那边 想错了 艹....

然后 就暴力 tle tle 。。。

然后 我去看了下 别人的解题报告 顿悟啊...

直接贴别人的AC代码吧 不想写了 心累啊

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 const int size = 100010;
 6 char str1[size];
 7 char str2[size];
 8 
 9 int solve( char* str1 , char* str2 , int& val )
10 {
11     int i , j , t , ans;
12     int len1 = strlen(str1);
13     int len2 = strlen(str2);
14     ans = size*size;
15     for( i = 0 ; i<len1 ; i++ )
16     {
17         t = i;
18         j = 0;
19         while( t<len1 && j<len2 && str1[t] == str2[j] )
20         {
21             t ++;
22             j ++;
23         }
24         if( t==len1 )
25         {
26             val = i;
27             ans = len2+i;
28             break;
29         }
30     }
31     return ans;
32 }
33 
34 void outPut( int val , int ans , char* str1 , char* str2 )
35 {
36     for( int i = 0 ; i<val ; i++ )
37     {
38         cout << str1[i];
39     }
40     cout << str2 << endl;
41 }
42 
43 int main()
44 {
45     cin.sync_with_stdio(false);
46     int i , j , t;
47     int val1 , ans1 , val2 , ans2 , ans , flag;
48     while( cin >> str1 >> str2 )
49     {    
50         val1 = val2 = -1;
51         ans1 = solve( str1 , str2 , val1 );
52         ans2 = solve( str2 , str1 , val2 );
53         ans = min( ans1 , ans2 );    
54         flag = strcmp(str1,str2);
55         if( ans == size*size )
56         {
57             if( flag<0 )
58             {
59                 cout << str1 << str2 << endl;
60             }
61             else
62             {
63                 cout << str2 << str1 << endl;
64             }
65         }
66         else
67         {
68             if( ans1 < ans2 )
69             {
70                 outPut( val1 , ans1 , str1 , str2 );
71             }
72             else if( ans1 > ans2 )
73             {
74                 outPut( val2 , ans2 , str2 , str1 );
75             }
76             else
77             {
78                 if( flag<0 )
79                 {
80                     outPut( val1 , ans1 , str1 , str2 );
81                 }
82                 else
83                 {
84                     outPut( val2 , ans2 , str2 , str1 );
85                 }
86             }
87         }
88     }
89     return 0;
90 }
View Code

暴力地 拿上来,...

bubuko.com,布布扣
 1 复制代码
 2 
 3 #include<iostream>
 4 #include<cstdio>
 5 #include<cstring>
 6 
 7 using namespace std;
 8 
 9 const int maxn=100010;
10 
11 int next[maxn];
12 char s1[maxn],s2[maxn];
13 
14 void getnext(char *t){
15     int len=strlen(t);
16     int i=0,j=-1;
17     next[0]=-1;
18     while(i<len){
19         if(j==-1 || t[i]==t[j]){
20             i++;j++;
21             next[i]=j;
22         }else
23             j=next[j];
24     }
25 }
26 
27 int KMP(char *s,char *t){
28     int len1=strlen(s),len2=strlen(t);
29     int i=0,j=0;
30     getnext(t);
31     while(i<len1 && j<len2){
32         if(j==-1 || s[i]==t[j]){
33             i++;j++;
34         }else
35             j=next[j];
36     }
37     if(i==len1)
38         return j;
39     return 0;
40 }
41 
42 int main(){
43 
44     //freopen("input.txt","r",stdin);
45 
46     while(~scanf("%s%s",s1,s2)){
47         int x=KMP(s1,s2);
48         int y=KMP(s2,s1);
49         if(x==y){
50             if(strcmp(s1,s2)<0)
51                 printf("%s%s\n",s1,s2+x);
52             else
53                 printf("%s%s\n",s2,s1+x);
54         }else if(x>y)
55             printf("%s%s\n",s1,s2+x);
56         else
57             printf("%s%s\n",s2,s1+y);
58     }
59     return 0;
60 }
View Code

还是 去洗个澡吧...

 

hdu--1867--kmp<kmp,怪我太sb>,布布扣,bubuko.com

hdu--1867--kmp<kmp,怪我太sb>

标签:style   blog   http   color   os   io   for   ar   

原文地址:http://www.cnblogs.com/radical/p/3915731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!