Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 12468 | Accepted: 5407 |
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<stdio.h> #include<stdlib.h> #include<string.h> int n,m,lenmax,cbegin; char a[15][65]; int x,y; int next[65]; void init() { int i,j; scanf("%d",&m); for(i=0;i<m;i++) scanf("%s",a[i]); lenmax=60; cbegin=-1; } void formNext() { int i,j; next[x]=-1; i=x; j=-1; while(i<y) { if(j==-1) { i++; j=x; next[i]=j; } else { if(a[0][i]==a[0][j]) { i++; j++; next[i]=j; } else j=next[j]; } } } int KMP(int target) { int i,j; formNext(); i=0; j=x; while(i<60) { if(a[0][j]==a[target][i]||j==-1) { i++; if(j==-1) j=x; else j++; } else { j=next[j]; } if(j==y+1) return 1; } return -1; } int sure() { int i,j; for(i=1;i<m;i++) { if(KMP(i)==-1) break; } if(i==m) return 1; return 0; } void update(int newCbegin) { int i,j; if(cbegin==-1) cbegin=newCbegin; else { for(i=cbegin,j=newCbegin;i<cbegin+lenmax;i++,j++) if(a[0][i]>a[0][j]) { cbegin=newCbegin; break; } else if(a[0][i]<a[0][j]) break; } } void print() { int i,j; for(i=cbegin;i<cbegin+lenmax;i++) printf("%c",a[0][i]); printf("\n"); } int main() { int i,j; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { init(); for(lenmax=60;lenmax>=3;lenmax--) { x=0; y=x+lenmax-1; while(y<60) { if(sure()) { update(x); } x++; y=x+lenmax-1; } if(cbegin!=-1) break; } if(cbegin==-1) printf("no significant commonalities\n"); else print(); } } return 0; }