POJ_3080
这个题目直接暴力枚举就可以过了。
一开始只看了Sample就开始做题了,结果忽视了输出的碱基至少要有3个这个条件。以后无论什么样的题目都要仔细审题!
#include<stdio.h>
#include<string.h>
char b[15][70];
char ans[70],temp[70];
int main()
{
int i,j,k,n,t,p,q,r,s,len,match,find,ok;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",b[i]);
memset(ans,'\0',sizeof(ans));
memset(temp,'\0',sizeof(temp));
for(len=2;len<60;len++)
for(i=0,j=i+len;j<60;i++,j++)
{
ok=1;
for(k=1;k<n;k++)
{
find=0;
for(p=0,q=p+len;q<60;p++,q++)
{
match=1;
for(r=i,s=p;r<=j;r++,s++)
if(b[0][r]!=b[k][s])
{
match=0;
break;
}
if(match)
{
find=1;
break;
}
}
if(!find)
{
ok=0;
break;
}
}
if(ok)
{
for(p=i,q=0;p<=j;p++,q++)
temp[q]=b[0][p];
if(strlen(ans)<strlen(temp))
strcpy(ans,temp);
else if(strlen(ans)==strlen(temp)&&strcmp(ans,temp)>0)
strcpy(ans,temp);
}
}
if(strlen(ans)<3)
printf("no significant commonalities\n");
else printf("%s\n",ans);
}
return 0;
}