hdu 2594 Simpsons’ Hidden Talents

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

思路:将两个串连起来求一遍Next数组就行长度为两者之和,遍历时注意长度应该小于两个串中的最小值

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<vector>
#include<queue>
#include<iterator>
#include<vector>
#include<set>
#define dinf 0x3f3f3f3f
typedef long long ll;
//const int Max=(1<<16)+10;
using namespace std; const int MAX=+;
char s1[MAX*],s2[MAX];
int Next[MAX*]; void get_next(char *a){
int i=-,j=,len=strlen(a);
Next[]=-;
while(j<len){
if(i == - || a[i] == a[j])Next[++j]=++i;
else i=Next[i];
}
return;
} int main(){
while(cin>>s1>>s2){
int lena=strlen(s1),lenb=strlen(s2),len=lena+lenb;
strcat(s1,s2);
get_next(s1);
while(Next[len]>lena || Next[len]>lenb)len=Next[len];
len=Next[len];
for(int i=;i<len;++i)cout<<s1[i];
if(len)cout<<' ';
cout<<len<<endl;
}
return ;
}
上一篇:将数组之中的省份市区地区ID改成对用中文字符


下一篇:设计模式之单例模式(Singleton)