因为一直有事这道题又有点繁琐, 所以写了好多天今天才AC,不过1A还是很爽的。
思路还是很简单的,对第一个主串枚举其所有子串,然后将每个子串都与其他的所以主串KMP匹配,如果是所有主串的公共子串则记录 并选出最大的一个 注意这道题要字典序最小
代码:
#include "iostream" using namespace std; #define maxsize 80 char c[11][maxsize]; char substring[maxsize]; int next[11][maxsize]; char cans[maxsize]; void getnext(int n,int length) { int i=0,j=-1; next[n][0]=-1; while(i<length) { if (j==-1||c[n][i]==c[n][j]) { i++; j++; next[n][i]=j; } else { j=next[n][j]; } } } int KMP(int n,int length) { int i=0,j=0; int length1=strlen(substring); while (i<length&&j<length1) { if (j==-1||c[n][i]==substring[j]) { i++; j++; } else { j=next[n][j]; } } if (j>=length1) { return i-length1 ; } else return -3; } int main() { int case1; scanf("%d",&case1); while (case1--) { int num; scanf("%d",&num); int i,j; for(i=0;i<num;i++) { scanf("%s",c[i]); int length=strlen(c[i]); getnext(i,length);//计算每个字符串的next } int length1=strlen(c[0]); int tans=0; //枚举从c[0]所有子串 for (i=2;i<length1;i++)//i表示子串长度 { for (j=0;j<length1;j++)//j 表示子串第一个元素位置 { substring[0]='\0'; strncpy(substring,c[0]+j,i+1);//得到一个子串 int flag=1; int slen=strlen(substring); //判断子串在不在目标串中 for (int k=1;k<num;k++) { int temp=KMP(k,strlen(c[k])); if (temp==-3)//说明这个子串不存在于c[k] { flag=0; break; } } if (flag==1) { if (tans==slen) { if (strcmp(cans,substring)>0) { tans=slen; strcpy(cans,substring); } } if (tans<slen) { tans=slen; strcpy(cans,substring); } } } } if (tans<3) { cout<<"no significant commonalities"<<endl; } else cout<<cans<<endl; } }
相关推荐
北大POJ3080-Blue Jeans 解题报告+AC代码
北大ACM-POJ3080 - Blue Jeans 原比赛题目的测试数据
北大POJ2002-Squares 解题报告+AC代码
北大POJ1207-The 3n + 1 problem 解题报告+AC代码
北大POJ3253-POJ3253-Fence Repair【STL优先队列】 解题报告+AC代码
北大POJ1426-Find The Multiple【BFS+同余模】 解题报告+AC代码
poj 1000 - 2000 部分题目 官方分类 poj 1000 - 2000 部分题目 官方分类
北大POJ3020-Antenna Placement 解题报告+AC代码
北大POJ1002-487-3279【Hash+Qsort】 解题报告+AC代码
北大POJ3414-Pots 解题报告+AC代码
北大POJ3009-Curling 2.0【DFS+Vector+回溯+剪枝】 解题报告+AC代码
这是魔兽世界终极版POJ的-测试数据,找了好久才找到的。 本来想设置为0积分,但是它居然自动收费(o_ _)ノ。 看传送门:https://pan.baidu.com/s/1cCIwW8psGDASu2JdZawG3Q
北大POJ1159-Palindrome 解题报告+AC代码
北大POJ2513-Colored Sticks【TrieTree+MergeSet+EulerPath】 解题报告+AC代码
北大POJ初级-简单搜索 解题报告+AC代码
北大POJ3026-Borg Maze【BFS+Prim】 解题报告+AC代码
北大POJ初级-所有题目AC代码+解题报告
POJ3211--Washing Clothes
北大POJ2503-Babelfish 解题报告+AC代码
北大POJ1201-Intervals 解题报告+AC代码