题目poj1226(可暴力,可后缀数组)
//题意:给定n个串,求一个最大子串长度, //使得它或者它的逆向串在每个串中出现。 //思路:先求出最短的串sho[],然后枚举答案长度ans(len~1)。 //于是sho[]就被分成了len-ans+1个子串pos[], //再分别求出这些字串的反串inv[], //判断pos[]和inv[]是否都出现在所有的串中。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std ; struct tt { char s[110]; int len; }aa[110]; struct ttt { char a[110],b[110]; int len; }bb[10000]; int cmp(ttt x,ttt y) { return x.len>y.len; }; int main () { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); int minn=210000,minid=0; for(int i=0;i<n;i++) { scanf("%s",aa[i].s); aa[i].len=strlen(aa[i].s); if(aa[i].len<minn) minn=aa[i].len,minid=i; } int id=0; for(int i=0;i<minn;i++) { for(int j=i;j<minn;j++) { int kk=0; for(int k=i;k<=j;k++) bb[id].a[kk++]=aa[minid].s[k]; bb[id].a[kk]='