Submission #1266225

#TimeUsernameProblemLanguageResultExecution timeMemory
1266225canhnam357Cezar (COCI16_cezar)C++20
10 / 100
1 ms332 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<string> b(n); for (string &s : b) cin >> s; vector<string> a; for (int i = 0; i < n; i++) { int p; cin >> p; a.push_back(b[--p]); } vector<int> adj[26]; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (a[i].find(a[j]) == 0) { cout << "NE\n"; return 0; } if (a[j].find(a[i]) == 0) continue; for (int k = 0;; k++) { if (a[i][k] != a[j][k]) { adj[a[i][k] - 'a'].push_back(a[j][k] - 'a'); break; } } } } vector<int> topo, vis(26); function<void(int)> dfs = [&](int u) { vis[u] = 1; for (int v : adj[u]) { if (!vis[v]) dfs(v); else if (vis[v] == 1) { cout << "NE\n"; exit(0); } } topo.push_back(u); vis[u] = 2; }; for (int i = 0; i < 26; i++) { sort(adj[i].begin(), adj[i].end()); adj[i].erase(unique(adj[i].begin(), adj[i].end()), adj[i].end()); } for (int i = 0; i < 26; i++) { if (!vis[i]) dfs(i); } reverse(topo.begin(), topo.end()); cout << "DA\n"; string ans(26, ' '); for (int i = 0; i < topo.size(); i++) { ans[topo[i]] = i + 'a'; } cout << ans << '\n'; 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...