Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 12149 | Accepted: 5266 |
Description
Input
Output
Sample Input
3 2 GATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 3 GATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATA GATACTAGATACTAGATACTAGATACTAAAGGAAAGGGAAAAGGGGAAAAAGGGGGAAAA GATACCAGATACCAGATACCAGATACCAAAGGAAAGGGAAAAGGGGAAAAAGGGGGAAAA 3 CATCATCATCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ACATCATCATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AACATCATCATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
Sample Output
no significant commonalities AGATAC CATCATCAT
Source
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; const int len=60; char DNA[10+10][len+1]; char ans[len+1],Copy[len+1]; int ans_length,length; int main() { int t,n,pd,flag,i,j,k,count; scanf("%d",&t); while(t--) { count=0; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%s",DNA[i]); ans_length=-1; length=1; for(i=0;;i++) { flag=1; pd=i; if(pd+length>len)//判断序列是否越界 { length++; i=-1; if(length>len) break; continue; } for(j=0;j<length;j++) Copy[j]=DNA[1][pd++]; Copy[j]='\0'; for(k=2;k<=n;k++) { if(!strstr(DNA[k],Copy))//str函数是c语言自带的一个函数,意思是Copy数组是否在DNA[K]中出现过,其实这个可以用kmp来判断,但是我们有这么方便的函数,和乐而不为呢?? { flag=0; break; } } if(flag) { if(length==ans_length) { if(strcmp(ans,Copy)>0) strcpy(ans,Copy); } if(length>ans_length) { ans_length=length; strcpy(ans,Copy); } } } if(ans_length<3) printf("no significant commonalities\n"); else printf("%s\n",ans); } return 0; }
poj3080Blue Jeans,布布扣,bubuko.com
原文:http://blog.csdn.net/u014303647/article/details/38448375