标签:span bit color upd ems har node print lse
#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; }
标签:span bit color upd ems har node print lse
原文地址:https://www.cnblogs.com/DWVictor/p/10283189.html