讨厌字符串

 #include<iostream>
#include<cstring>
#include<string>
using namespace std;
struct node{
    int v[26],p;
    void init(){memset(v,0,sizeof(v));p=0;}
}t[1001000];
char str[15],mm[15];
int cnt;
void update(int &rt,int k,int c){
    if(rt==0)rt=(++cnt),t[rt].init();
    if(t[rt].p+1==c)t[rt].p++;
    if(mm[k]=='\0'){return;}
    update(t[rt].v[mm[k]-'a'],k+1,c);
}
int query(int rt,int k){
    if(str[k]=='\0')return t[rt].p;
    if(rt==0)return 0;
    return query(t[rt].v[str[k]-'a'],k+1);
}
char cm[15];
char ans[15],lens;
void dfs(int rt,int n,int bit){
int flag=0;
for(int i=0;i<26;i++){
if(t[rt].v[i]!=0&&t[t[rt].v[i]].p==n){
cm[bit]='a'+i;
dfs(t[rt].v[i],n,bit+1);
flag=1;
}
}
if(!flag){
cm[bit]='\0';
if(bit>lens){
lens=bit;
memcpy(ans,cm,sizeof(ans));
}
//printf("%s\n",cm);
}
}
int main()
{
int N,top;
while(~scanf("%d",&N)){
top=cnt=0;
for(int i=1;i<=N;i++){
scanf("%s",str);
int len=strlen(str);
int c=1<<len;
for(int w=0;w<len;w++){
for(int j=1;j<c;j++)
{
   int k=0;
   for(int v=0;v<len;v++)
    if((1<<v)&j){
    mm[k++]=str[v];
}
mm[k]='\0';
update(top,0,i);
}
str[len]=str[0];
for(int j=0;j<len;j++)str[j]=str[j+1];
}
}
lens=0;
dfs(top,N,0);
if(lens==0)puts("0");
else printf("%s\n",ans);
}
return 0;
}

猜你喜欢

转载自www.cnblogs.com/DWVictor/p/10283189.html