解题思路:
注意事项:
参考代码:#include<iostream>#include<queue>#include<map>#include<algorithm>using namespace std;int n,cnt,in[50001],ans[50001];bool falg;char have[50001];string s[50001],g;vector<int>G[50001];map<char,int>T;void Topol(){ int count=0,k=0; queue<int>q; for(int i=1;i<=cnt;i++) if(!in[i]) { k++; q.push(i); } if(k!=1) { falg=true; return; } while(!q.empty()) { int sum=0,x=q.front(); q.pop(); count++; ans[x]=count; for(int i=0;i<G[x].size();i++) { int s=G[x][i]; in[s]--; if(!in[s]) { q.push(s); sum++; } } if(sum>1) { falg=true; return; } } if(count!=cnt) falg=true; return;}int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>s[i]; cin>>g; for(int i=2;i<=n;i++) for(int j=0;j<min(s[i].size(),s[i-1].size());j++) { if(!T[s[i][j]]) { T[s[i][j]]=++cnt; have[cnt]=s[i][j]; } if(!T[s[i-1][j]]) { T[s[i-1][j]]=++cnt; have[cnt]=s[i-1][j]; } if(s[i-1][j]!=s[i][j]) { int a=T[s[i-1][j]],b=T[s[i][j]]; G[a].push_back(b); in[b]++; break; } } Topol(); if(falg) { cout<<0; return 0; } sort(have+1,have+cnt+1); for(int i=0;i<g.size();i++) { int now=T[g[i]]; if(now==0) { cout<<0; return 0; } } for(int i=0;i<g.size();i++) { int now=T[g[i]],rig=ans[now]; putchar(have[rig]); } return 0;}
0.0分
3 人评分
母牛的故事 (C语言代码)浏览:478 |
剪刀石头布 (C语言代码)不知道怎么直接在scanf中用枚举变量浏览:1436 |
求圆的面积 (C语言代码)浏览:1366 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:573 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:689 |
【明明的随机数】 (C语言代码)浏览:845 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:727 |
1054题解浏览:516 |
The 3n + 1 problem (C语言代码)浏览:550 |
字符逆序 (C语言代码)浏览:541 |