Submission #520303

#TimeUsernameProblemLanguageResultExecution timeMemory
520303new_accType Printer (IOI08_printer)C++14
100 / 100
158 ms69440 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second #define all(a) a.begin(), a.end() #define pb push_back const ll maxv = LLONG_MAX; const ll minv = maxv * (-1LL); const int maxn = 25*1000+10; const int maxm = 1000*1000+10; const int SS = 1024*1024; string s[maxn]; int trie[maxn*20][26+10]; int l = 1; bool konczy[maxn*20]; vector <char> res; int m1,m2; int g[maxn*20]; void Dfs(int v, int odl) { if(v == 0) return; if(m1 < odl) m1 = odl, m2 = v; for(int i = 1; i <= 26; i++) Dfs(trie[v][i], odl + 1); } bool Dfs2(int v) { if(v == 0) return false; if(v == m2) return true; g[v] = 27; for(int i = 1; i <= 26; i++) if(Dfs2(trie[v][i])) g[v] = i; if(g[v] != 27) return true; return false; } void Dfswyn(int v) { if(konczy[v]) res.pb('P'); if(v == m2) return; for(int i = 1; i < g[v]; i++) { if(trie[v][i] != 0) { res.pb(char(i + 96)); Dfswyn(trie[v][i]); } } for(int i = 26; i >= g[v]; i--) { if(trie[v][i] != 0) { res.pb(char(i+96)); Dfswyn(trie[v][i]); } } if(g[v] < 27) return; res.pb('-'); } void add(int ind) { string a = s[ind]; int curr = 1; for(int i = 0; i < a.size(); i++) { if(trie[curr][(int(a[i]) - 96)] == 0) trie[curr][(int(a[i]) - 96)] = ++l; curr = trie[curr][int(a[i]) - 96]; } konczy[curr] = true; } void solve() { int n; cin >> n; for(int i = 1; i <= n; i++) cin >> s[i]; for(int i = 1; i <= n; i++) add(i); Dfs(1,1); Dfs2(1); Dfswyn(1); cout << res.size() << "\n"; for(auto i : res) cout << i << "\n"; } int main() { ios_base::sync_with_stdio(0),cin.tie(0); solve(); }

Compilation message (stderr)

printer.cpp: In function 'void add(int)':
printer.cpp:70:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |     for(int i = 0; i < a.size(); i++) {
      |                    ~~^~~~~~~~~~
#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...