3 10.0 AAA AA CCC
Case 1: 2
#include<stdio.h>
#include<string.h>
const int N = 105;
int fath[N],ins[N],n;
void init()
{
for(int i=0;i<n;i++)
fath[i]=i,ins[i]=0;
}
int findfath(int x)
{
if(x!=fath[x])
fath[x]=findfath(fath[x]);
return fath[x];
}
void setfath(int x,int y)
{
x=findfath(x);
y=findfath(y);
fath[x]=y;
}
int main()
{
double P;
int c=0,len[N];
char DNA[N][N];
while(scanf("%d%lf",&n,&P)>0)
{
for(int i=0;i<n;i++)
{
scanf("%s",DNA[i]);
len[i]=strlen(DNA[i]);
}
init();
for(int i=0; i<n; i++)
for(int j=i+1; j<n; j++)
{
int maxlen=0,flag=0;
for(int ti=0;ti<len[i]&&maxlen<len[i]-ti;ti++)
{
for(int tj=0;tj<len[j]&&maxlen<len[j]-tj;tj++)
{
int ii,jj;
for( ii=ti,jj=tj; ii<len[i]&&jj<len[j]; ii++,jj++)
if(DNA[i][ii]!=DNA[j][jj])
{
break;
}
if(ii-ti>maxlen)
maxlen=ii-ti;
if(100*maxlen/(len[i]*1.0)>P&&100*(maxlen/(len[j]*1.0))>P)
setfath(i,j),flag=1;
if(flag)break;
}
if(flag)break;
}
}
int k=0;
for(int i=0;i<n;i++)
if(fath[i]==i)
k++;
printf("Case %d:\n%d\n",++c,k);
}
}
原文地址:http://blog.csdn.net/u010372095/article/details/44282925