Submission #330967

#TimeUsernameProblemLanguageResultExecution timeMemory
330967MetBShift (POI11_prz)C++14
100 / 100
350 ms22264 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; typedef unsigned long long ull; typedef long long ll; typedef long double ld; const int N = 2000001; const ll INF = 1e18, MOD = 1e9 + 7, MOD2 = 1e6 + 3; struct cyclic_array { vector <int> v; int shift, n; cyclic_array(int n) : v (vector <int> (n)), shift (0), n (n) {} void make_b() { shift = shift ? shift - 1 : n - 1; } void make_inv() { shift = (shift == n - 1) ? 0 : shift + 1; } void make_a() { int& a = v[shift % n]; int& b = v[(shift + 1) % n]; int& c = v[(shift + 2) % n]; swap(b, c), swap(a, b); } int& operator[] (int x) { return v[(x + shift) % n]; } }; vector <pair<int, char>> s; int n; void add_a(cyclic_array& v) { v.make_a(); if (!s.empty() && s.back().second == 'b') s.back().first++; else s.push_back({1, 'b'}); if (s.back().first == n) s.pop_back(); } void add_b(cyclic_array& v) { v.make_b(); if (!s.empty() && s.back().second == 'a') s.back().first++; else s.push_back({1, 'a'}); if (s.back().first == n) s.pop_back(); } void add_inv(cyclic_array& v) { v.make_inv(); if (!s.empty() && s.back().second == 'a') s.back().first = (s.back().first + n - 1) % n; else s.push_back({n - 1, 'a'}); if (s.back().first == 0) s.pop_back(); } int main () { cin >> n; cyclic_array v (n); for (int i = 0; i < n; i++) { cin >> v[i]; } for (int i = 2; i <= n; i++) { while (v[2] != i) add_b(v); while (v[0] != i - 1 && v[1] != i - 1) { add_a(v), add_b(v), add_b(v); } if (v[0] == i - 1) { if (i >= n - 1) { if (n % 2 == 0) { while (v[1] != i - 1) { add_a(v), add_b(v), add_b(v); } } else { cout << "NIE DA SIE\n"; return 0; } } else { add_inv(v), add_a(v), add_a(v); } } } while (v[0] != 1) add_b(v); cout << s.size () << endl; for (auto a : s) { cout << a.first << a.second << ' '; } 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...