标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 11214 | Accepted: 2908 |
Description
dog.gopher
gopher.rat
rat.tiger
aloha.aloha
arachnid.dog
Input
Output
Sample Input
2 6 aloha arachnid dog gopher rat tiger 3 oak maple elm
Sample Output
aloha.arachnid.dog.gopher.rat.tiger ***
Source
#include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<iostream> #include<vector> using namespace std; int n,vis[1005],len[1005],k,in[1005],out[1005],ans[1005],cnt; string s[1005]; struct node{ int u,m; }; vector<node> g[1005]; void euler(int x){ for(int i=0;i<g[x].size();i++){ int v=g[x][i].u; if(!vis[ g[x][i].m ]){ vis[ g[x][i].m ]=1; euler(v); cnt++; ans[cnt]=g[x][i].m; } } } int main(){ int t; scanf("%d",&t); while(t--){ int start=100; cin >> n; k=0; memset(vis,0,sizeof(vis)); memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); for(int i=1;i<=26;i++) g[i].clear(); for(int i=1;i<=n;i++){ cin >> s[i]; } sort(s+1,s+n+1); for(int i=1;i<=n;i++){ len[i]=s[i].size(); } for(int i=1;i<=n;i++){ node t; t.u=s[i][len[i]-1]-‘a‘+1; t.m=i; g[ s[i][0]-‘a‘+1 ].push_back( t ); out[ s[i][0]-‘a‘+1 ]++; in[s[i][len[i]-1]-‘a‘+1]++; start=min(start,s[i][0]-‘a‘+1); start=min(start,s[i][len[i]-1]-‘a‘+1); } int fin=0,fout=0,end=0,flag=0; for(int i=1;i<=26;i++){ if(in[i]+1==out[i]){ start=i; fin++; } else if(in[i]==out[i]+1){ fout++; } else if(in[i]!=out[i]) flag=1; } if(flag==1) { printf("***\n"); continue; } else if( (fin==1&&fout==1) || (fin==0&&fout==0) ) { cnt=0; euler(start); if(cnt==n){ for(int i=cnt;i>=1;i--) { if(i==cnt) cout << s[ ans[i] ]; else cout << "." << s[ ans[i] ]; } printf("\n"); } else { printf("***\n"); continue; } } else { printf("***\n"); continue; } } return 0; }
标签:
原文地址:http://www.cnblogs.com/N-Psong/p/5547991.html