一共只有十组字符串+每个字符串<=8 可以想到暴力跑跑(大雾)
玄学枚举 不宜模仿
#include <bits/stdc++.h>
#include <cstdio>
#include <cstdlib>
using namespace std;
int cmp(string a,string b)
{
if(a.length()==b.length()) return a<b;
return a.length()>b.length();
}
int main()
{
int n;
string st,sr;
while(~scanf("%d",&n))
{
vector <string> c;
map <string,int> mp;
for(int t = 0;t <n ;t ++)
{
cin>>sr;
st=sr.substr(1,sr.size()-1)+sr;
map <string,int> mmp;
int len = st.size(),pows = 1;
for(int i = 0;i < len;i++) pows*=2;
for(int i = 1;i <pows;i++)
{
int num[20]={0};
int temp = i,cnt = 0;
string tempp;
while(temp)
{
if(temp%2)
num[cnt]++;
cnt++;
temp/=2;
}
for(int j = cnt-1;j>=0&&cnt-j<=sr.size();j--)
{
if(num[j])
{
int ttt = len-j-1;
tempp+=st.substr(ttt,1);
mmp[tempp]++;
if(mmp[tempp]<=1&&tempp.size()>0)
mp[tempp]++;
}
}
}
}
int flag = 0;
for(auto &f:mp)
{
if(f.second == n)
{
c.push_back(f.first);
flag = 1;
}
}
sort(c.begin(),c.end(),cmp);
if(flag ) cout<<c[0]<<endl;
else printf("0\n");
}
return 0;
}
用mp存子串,mmp筛重,c(vector)满足情况的字符子串,cmp来使子串长度最长= =