Submission #1153802

#TimeUsernameProblemLanguageResultExecution timeMemory
1153802RiverFlowAncient Machine (JOI21_ancient_machine)C++20
0 / 100
34 ms6332 KiB
#include <bits/stdc++.h> #ifndef LOCAL #include "Anna.h" #endif #define nl "\n" #define no "NO" #define yes "YES" #define fi first #define se second #define vec vector #define task "main" #define _mp make_pair #define ii pair<int, int> #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define evoid(val) return void(std::cout << val) #define FOR(i, a, b) for(int i = (a); i <= (b); ++i) #define FOD(i, b, a) for(int i = (b); i >= (a); --i) #define unq(x) sort(all(x)); x.resize(unique(all(x)) - x.begin()) using namespace std; template<typename U, typename V> bool maxi(U &a, V b) { if (a < b) { a = b; return 1; } return 0; } template<typename U, typename V> bool mini(U &a, V b) { if (a > b) { a = b; return 1; } return 0; } const int N = (int)2e5 + 9; const int mod = (int)1e9 + 7; namespace { int variable_example = 0; } #ifdef LOCAL vector<int> sent; void Send(int a) { assert(a == 0 or a == 1); sent.push_back(a); } #endif const int S = 63; long long f[70][2]; void builddp() { f[0][0] = 1; FOR(i, 1, S) { f[i][0] = f[i - 1][0] + f[i - 1][1]; f[i][1] = f[i - 1][0]; } } const int G = 42; void Anna(int n, vector<char> s) { builddp(); vector<int> res; int pos = -1; for(int i = 0; i < n; ++i) { if (s[i] != 'X') { res.push_back(0); } else { res.push_back(1); res.push_back(0); pos = i; break ; } } if (pos != -1) { for(int i = pos + 1; i < n; ++i) { int j = i; while (j + 1 < n and s[j + 1] == s[j]) { ++j; } FOR(k, 1, j - i) res.push_back(0); res.push_back( s[j] == 'Z' ); i = j; } } // for(int x : res) cout << x << ' '; cout << nl; for(int i = 0; i < sz(res); i += S) { int r = min(sz(res) - 1, i + S - 1); int len = r - i + 1; long long val = 0; FOR(j, i, r) { if (res[j] == 1) { val += f[len][0]; } --len; } val += 1; FOD(i, G, 0) { Send(1LL & val >> i); } } } #ifdef LOCAL int main() { freopen("main.inp", "r", stdin); freopen("main.out", "w", stdout); int n; cin >> n; vector<char> s(n); for(int i = 0; i < n; ++i) { cin >> s[i]; } Anna(n, s); cout << n << ' ' << sz(sent) << nl; for(int x : sent) cout << x << ' '; return 0; } #endif
#include <bits/stdc++.h> #ifndef LOCAL #include "Bruno.h" #endif #define nl "\n" #define no "NO" #define yes "YES" #define fi first #define se second #define vec vector #define task "main" #define _mp make_pair #define ii pair<int, int> #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define evoid(val) return void(std::cout << val) #define FOR(i, a, b) for(int i = (a); i <= (b); ++i) #define FOD(i, b, a) for(int i = (b); i >= (a); --i) #define unq(x) sort(all(x)); x.resize(unique(all(x)) - x.begin()) using namespace std; template<typename U, typename V> bool maxi(U &a, V b) { if (a < b or a==-1) { a = b; return 1; } return 0; } template<typename U, typename V> bool mini(U &a, V b) { if (a > b) { a = b; return 1; } return 0; } const int N = (int)2e5 + 9; const int mod = (int)1e9 + 7; namespace { int variable_example = 0; int FunctionExample(int P) { return 1 - P; } } // namespace #ifdef LOCAL void Remove(int d) { cout << d << nl; } #endif #define MASK(i) (1 << (i)) const int S = 63; long long f[70][2]; void builddp() { f[0][0] = 1; FOR(i, 1, S) { f[i][0] = f[i - 1][0] + f[i - 1][1]; f[i][1] = f[i - 1][0]; } } const int G = 42; void Bruno(int n, int l, vector<int> a) { builddp(); vector<int> v; int pt = 0; bool ex = n%S != l%S; if (!ex){ FOR(i, 0, n - 1) Remove(i); return ; } // FOR(mask, 0, (1 << 5) - 1) { // FOR(i, 0, 4) cout << (1 & mask >> i); // cout << nl; // } // FOR(i, 0, 6) cout << f[i][0] << ' '; cout << nl; // FOR(i, 0, 6) cout << f[i][1] << ' '; cout << nl; for(int i = 0; i < n + 1; i += S) { int r = min(i + S - 1, n); int len = r - i + 1; // cerr << i << ' ' << len << nl; long long val = 0; FOR(j, 0, G) val = val * 2LL + a[pt++]; // cout << val << nl; FOD(i, len, 1) { v.push_back(val > f[i][0]); if (f[i][0] < val) { val -= f[i][0]; } } } int pos = 0; FOR(i, 0, sz(v) - 1) { if (v[i] == 1) { pos = i; v.erase(v.begin() + i + 1); break ; } else Remove(i); } // for(int x : v) cout << x << ' '; cout << nl; for(int i = pos + 1, lst = pos; i < n; ++i) { if (v[i] == 1) { FOD(j, i-1, lst+1) { Remove(j); } Remove(i); lst = i; } } FOD(i, n - 1, 0) { if (v[i] == 0) { Remove(i); } else break ; } Remove(pos); } #ifdef LOCAL int main() { freopen(task".out", "r", stdin); // freopen(task".out", "w", stdout); int n, l; cin >> n >> l; vector<int> a(l); for(int i = 0; i < l; ++i) cin >> a[i]; Bruno(n, l, a); } #endif /* Let the river flows naturally */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...