Submission #1177239

#TimeUsernameProblemLanguageResultExecution timeMemory
1177239vicvicCezar (COCI16_cezar)C++20
0 / 100
0 ms328 KiB
#include <iostream> #include <fstream> #include <vector> #include <algorithm> #include <set> #include <queue> using namespace std; int n; string v[105], final[105]; int order[105], viz[50], outdegree[50]; set <int> vec[50], ivec[50]; vector <int> rnk; int main () { cin >> n; int mxlen=0; for (int i=1;i<=n;i++) { cin >> v[i]; mxlen=max (mxlen, (int)v[i].size()); } for (int i=1;i<=n;i++) { cin >> order[i]; } for (int i=1;i<=n;i++) { final[order[i]]=v[i]; } for (int i=n;i>=1;i--) { for (int j=i-1;j>=i-1;j--) { for (int ind=0;ind<min (final[i].size(), final[j].size());ind++) { if (final[i][ind]!=final[j][ind]) { vec[final[i][ind]-'a'+1].insert (final[j][ind]-'a'+1); ivec[final[j][ind]-'a'+1].insert (final[i][ind]-'a'+1); outdegree[final[i][ind]-'a'+1]++; break; } } } } queue <int> coada; for (int i=1;i<=26;i++) { if (outdegree[i]==0) { coada.push (i); viz[i]=1; } } while (!coada.empty()) { int x=coada.front(); rnk.push_back (x); coada.pop (); for (auto chestie : ivec[x]) { outdegree[chestie]--; if (outdegree[chestie]==0 && !viz[chestie]) { viz[chestie]=1; coada.push (chestie); } } } if (rnk.size()<26) { cout << "NE\n"; return 0; } cout << "DA\n"; for (auto chestie : rnk) { cout << char(chestie+'a'-1); } return 0; }
#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...