| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
KMP过的代码 关键是要输出的是字典序 比如 PDD 和 ADD 要输出ADD#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,alen,Next[70],resl,resr;
char a[70];
char s[15][70];
void getNext(int l,int r)
{
Next[0]=Next[1]=0;
for(int i=l+1;i<=r;i++)
{
int j=Next[i-l];
while(j&&a[i]!=a[j+l]) j=Next[j];
Next[i+1-l]=a[i]==a[j+l]?j+1:0;
}
}
bool KMP(int k,int l,int r)
{
int len=strlen(s[k]);
int j=l;
for(int i=0;i<len;i++)
{
while(s[k][i]!=a[j]&&(j-l)) j=Next[j-l]+l;
if(s[k][i]==a[j]) j++;
if(j==r+1) return true;
}
return false;
}
bool solve(int n)
{
bool ans=false;
for(int i=0;i<alen;i++)
{
for(int j=i+2;j<alen;j++)
{
bool flag=true;
getNext(i,j);
for(int k=0;k<n;k++) if(!KMP(k,i,j)) flag=false;
if(flag)
{
ans=true;
if(j-i>resr-resl) resr=j,resl=i;
else if(j-i==resr-resl)
{
bool Llarge=true;
for(int t=0;t<=resr-resl;t++)
{
if(a[resl+t]<a[i+t]) break;
else if(a[resl+t]>a[i+t])
{
Llarge=false;
break;
}
}
if(!Llarge) resr=j,resl=i;
}
}
}
}
return ans;
}
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
scanf("%s",a);
alen=strlen(a);
n--;
resl=resr=0;
for(int i=0;i<n;i++) scanf("%s",s[i]);
if(!solve(n)) puts("no significant commonalities");
else
{
for(int i=resl;i<=resr;i++) printf("%c",a[i]);
puts("");
}
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator