NC229458. 比赛!
描述
输入描述
第一行一个整数n (1≤n≤500)。表示比赛结果的信息数量。接下来n行每行一个形如X:YZ字符串,表示一个信息。
输出描述
输出一个字符串表示答案。如果没有正确的比赛结果输出“No Answer”
示例1
输入:
2 B:AD 7:BD
输出:
AB7D
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 416K, 提交时间: 2022-10-18 17:05:18
#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10; const int mod=1e9+7; int n,m,deg[200]; set<int>st; vector<int>a[200]; signed main(){ ios::sync_with_stdio(false);cin.tie(0); cin>>m; for(int i=1;i<=m;i++){ char s[10];cin>>s+1; int x=s[1],y=s[3],z=s[4]; st.insert(x);st.insert(y);st.insert(z); a[x].push_back(y);deg[y]++; a[z].push_back(x);deg[x]++; } queue<int>q; for(auto i:st)if(deg[i]==0)q.push(i); string s; while(q.size()){ int t=q.front();q.pop(); s.push_back((char)t); for(int i=0;i<a[t].size();i++){ deg[a[t][i]]--; if(deg[a[t][i]]==0)q.push(a[t][i]); } } reverse(s.begin(),s.end()); if(s.size()<st.size())cout<<"No Answer\n"; else cout<<s<<'\n'; }
Python3 解法, 执行用时: 43ms, 内存消耗: 4612K, 提交时间: 2023-05-07 15:16:39
import sys from collections import defaultdict, deque n=int(sys.stdin.readline()) bian=defaultdict(list) ru=defaultdict(int) vis={} cz=set() for _ in range(n): a=sys.stdin.readline().strip() x,y,z=a[0],a[2],a[3] cz.add(x) cz.add(y) cz.add(z) bian[y].append(x) bian[x].append(z) ru[x]+=1 ru[z]+=1 q=deque() for i in cz: if ru.get(i,0)==0: q.append(i) ans=[] while q: x=q.popleft() ans.append(x) for i in bian[x]: ru[i]-=1 if ru[i]==0: q.append(i) if len(ans)==len(cz): print(*ans,sep='') else: print('No Answer')
C++ 解法, 执行用时: 4ms, 内存消耗: 432K, 提交时间: 2021-11-01 11:11:30
#include<bits/stdc++.h> using namespace std;char u,v,fh,mid,ans[205];vector <int> p[205];queue <int> q;int vis[205],tot,cnt,in[205],n;signed main(){cin>>n;for(int i=1;i<=n;i++){cin>>mid>>fh>>u>>v;vis[mid]=vis[u]=vis[v]=1;p[u].push_back(mid);p[mid].push_back(v);in[mid]++;in[v]++;}for(int i=30;i<150;i++)if(vis[i]){tot++;if(!in[i])q.push(i);}while(!q.empty()){u=q.front();q.pop();ans[cnt++]=u;int len=p[u].size();for(int i=0;i<len;i++){v=p[u][i];in[v]--;if(!in[v])q.push(v);}} if(cnt==tot)for(int i=0;i<cnt;i++)cout<<ans[i];else cout<<"No Answer";}