Submission #91159

#TimeUsernameProblemLanguageResultExecution timeMemory
91159nikolapesic2802Cezar (COCI16_cezar)C++14
0 / 100
2 ms632 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/rope> #define ll long long #define pb push_back #define sz(x) (int)(x).size() #define mp make_pair #define f first #define s second #define all(x) x.begin(), x.end() using namespace std; using namespace __gnu_pbds; using namespace __gnu_cxx; template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>; ///find_by_order(),order_of_key() template<class T1, class T2> ostream& operator<<(ostream& os, const pair<T1,T2>& a) { os << '{' << a.f << ", " << a.s << '}'; return os; } template<class T> ostream& operator<<(ostream& os, const vector<T>& a) { os << '{'; for(int i=0;i<sz(a);i++) { if(i>0&&i<sz(a)) os << ", "; os << a[i]; } os << '}'; return os; } const int N=26; vector<vector<int> > graf(N); vector<int> visited(N); void dfs(int tr) { visited[tr]=1; for(auto p:graf[tr]) { if(visited[p]==1) { printf("NE\n"); exit(0); } if(visited[p]==0) dfs(p); } visited[tr]=2; } int main() { int n; scanf("%i",&n); vector<pair<int,string> > niz(n); for(int i=0;i<n;i++) cin >> niz[i].second; for(int i=0;i<n;i++) scanf("%i",&niz[i].first); sort(all(niz)); for(int i=1;i<n;i++) { for(int j=0;j<i;j++) { int si=niz[i].s.size(); int sj=niz[j].s.size(); if(si<sj) { if(niz[j].s.substr(0,si)==niz[i].s) { printf("NO\n"); return 0; } } } } for(int i=1;i<n;i++) { bool nasao=true; for(int j=0;j<min(niz[i].second.size(),niz[i-1].second.size());j++) { if(niz[i].s[j]!=niz[i-1].s[j]) { graf[niz[i-1].s[j]-'a'].pb(niz[i].s[j]-'a'); nasao=false; break; } } if(nasao) { if(niz[i].s.size()<niz[i-1].s.size()) { printf("NE\n"); return 0; } } } /*for(int i=0;i<N;i++) { fill(all(visited),1); dfs(i); }*/ int tr=0; vector<int> degree(N); for(int i=0;i<N;i++) { for(auto p:graf[i]) { degree[p]++; } } vector<int> sol(N,-1); for(int i=0;i<N;i++) { bool ima=false; for(int j=0;j<N;j++) { if(degree[j]==0) { sol[j]=tr; tr++; ima=true; for(auto p:graf[j]) { degree[p]--; } degree[j]=INT_MAX; break; } } if(!ima) { printf("NE\n"); return 0; } } printf("DA\n"); for(int i=0;i<N;i++) { printf("%c",sol[i]+'a'); } printf("\n"); return 0; }

Compilation message (stderr)

cezar.cpp: In function 'int main()':
cezar.cpp:78:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j=0;j<min(niz[i].second.size(),niz[i-1].second.size());j++)
                     ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cezar.cpp:52:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%i",&n);
  ~~~~~^~~~~~~~~
cezar.cpp:57:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%i",&niz[i].first);
         ~~~~~^~~~~~~~~~~~~~~~~~~~
#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...