Submission #1186819

#TimeUsernameProblemLanguageResultExecution timeMemory
1186819Ekber_EkberType Printer (IOI08_printer)C++20
100 / 100
214 ms90096 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> #define GOOD_LUCK ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #define ll long long #define itn int #define endl "\n" #define ff first #define ss second #define pb push_back #define ppb pop_back #define ins insert #define lb lower_bound #define ub upper_bound #define bs binary_search #define count1 __builtin_popcount #define all(v) v.begin(), v.end() #define unset unordered_set #define unmap unordered_map #define pqueue priority_queue #define ordered_set_less tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> #define ordered_set_greater tree<int, null_type, greater<int>, rb_tree_tag, tree_order_statistics_node_update> using namespace std; using namespace __gnu_pbds; struct point{ }; int ctoi(char x) { return (int)x - 'a'; } int sumab(int a, int b) { return (a + b) * (b - a + 1) / 2; } int gcd(int a, int b) { return (b == 0 ? a : gcd(b, a % b)); } int lcm(int a, int b) { return a / gcd(a, b) * b; } void print(vector <auto> &v) { for (const auto &i : v) cout << i << ' '; } void print_p(vector <pair<auto, auto>> &v) { for (const auto &i : v) cout << i.ff << ' ' << i.ss << endl; } int compress(int n, vector <int> &v) { vector <pair<int, int>> x(n); for (int i=0; i < n; i++) { x[i] = {v[i], i}; } sort(all(x)); int nxt=1; for (int i=0; i < n-1; i++) { if (x[i].ff == x[i+1].ff) { x[i].ff = nxt; } else x[i].ff = nxt++; } x[x.size()-1].ff = nxt; for (int i=0; i < n; i++) { swap(x[i].ff, x[i].ss); } sort(all(x)); for (int i=0; i < n; i++) { v[i] = x[i].ss; } return nxt; } int compress_p(int n, vector <pair<int, int>> &v) { vector <pair<int, int>> q; for (int i=0; i < n; i++) { q.pb({v[i].ff, i}); q.pb({v[i].ss, i}); } sort(all(q)); int nxt=0; for (int i=0; i < 2 * n - 1; i++) { if (q[i].ff == q[i+1].ff) q[i].ff = nxt; else q[i].ff = nxt++; } q.back().ff = nxt; for (auto &i : q) swap(i.ff, i.ss); sort(all(q)); for (int i=0; i < 2*n; i+=2) { v[i/2].ff = q[i].ss; v[i/2].ss = q[i+1].ss; } return nxt; } void timelimit() { int x = 1e+9; while (x--) x++; } void runtime() { int x = 1, y = 0; cout << x / y; } constexpr int MAX =450000, INF = 1e+9, MOD = 1e+9 + 7, K = 18; vector <unordered_map<int, int>> g(MAX+2); vector <int> cnt(MAX+2, 0); vector <char> st, is(MAX+2, 0); set <int> use; int nxt=1; int res=0; bool check(int x) { int sz = use.size(); use.insert(x); if (sz == use.size()) return 0; return 1; } void add(string k) { int u = 1; // cout << "a"; int sz = k.size(); cnt[u] = max(cnt[u], sz); for (int i=0; i < k.size(); i++) { int x = ctoi(k[i]); if (g[u][x] == 0) { if (nxt >= 1e+6) timelimit(); g[u][x] = ++nxt; } u = g[u][x]; cnt[u] = max(cnt[u], sz - i - 1); } is[u] = 1; } void dfs(int u=1) { if (is[u]) { if (check(u)) st.pb('P'); } res++; vector <array <int, 3>> x; for (auto &i : g[u]) { x.pb({cnt[g[u][i.ff]], g[u][i.ff], i.ff}); } sort(all(x)); for (auto &i : x) { st.pb((char)(i[2] + 'a')); dfs(i[1]); } st.pb('-'); res++; } void _() { int n; cin >> n; int ma=0; while (n--) { string k; cin >> k; add(k); ma = max(ma, (int)k.size()); } dfs(); while (st.back() == '-') st.ppb(); cout << st.size() << endl; for (char &i : st) cout << i << endl; } signed main() { // cout << 'a'; // GOOD_LUCK // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); freopen("log.txt", "w", stderr); int tests=1; // cin >> tests; for (int i=1; i <= tests; i++) { // cout << "Case #" << i << ": "; _(); // cout << endl; } // int n; // while (cin >> n) { // _(n); // cout << endl; // } return 0; } // Problem X // by Ekber_Ekber /* */

Compilation message (stderr)

printer.cpp: In function 'int main()':
printer.cpp:183:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  183 |         freopen("log.txt", "w", stderr);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...