제출 #1194449

#제출 시각아이디문제언어결과실행 시간메모리
1194449nquangCezar (COCI16_cezar)C++17
10 / 100
0 ms328 KiB
#include<bits/stdc++.h> using namespace std; const int maxn = 105; string s[maxn+1]; int n; int a[maxn+1]; int color[30]; vector<int>adj[30]; int id=26; int t[30]; char ans[30]; int findDiff(int u,int v){ int x=s[u].size(); int y=s[v].size(); for(int i=0;i<min(x,y);++i){ if(s[u][i]!=s[v][i]) return i; } return -1; } bool DAG=true; void dfs(int u){ color[u]=1; for(int v:adj[u]){ if(color[v]==0){ dfs(v); } else if(color[v]==1){ DAG=false; } } t[--id]=u; color[u]=2; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for(int i=1;i<=n;++i) cin >> s[i]; for(int i=1;i<=n;++i) cin >> a[i]; for(int i=1;i<n;++i){ int pos=findDiff(a[i],a[i+1]); if(pos==-1){ // ! de dieu kien duoi day ra ngoai vong if tren thi sai logic if(s[a[i]].size()>s[a[i+1]].size()){ cout << "NE"; return 0; } } else{ int x=s[a[i]][pos]-'a'; int y=s[a[i+1]][pos]-'a'; adj[x].push_back(y); } } for(int i=0;i<26;++i){ if(!color[i]) dfs(i); } if(!DAG){ cout << "NE"; return 0; } cout << "DA\n"; for(int i=0;i<26;++i){ ans[t[i]]=char('a'+i); } for(int i=0;i<26;++i) cout << ans[i]; } // viec if rat quan trong !
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...