解题思路:
注意事项:
参考代码:#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分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复