Submission #1160779

#TimeUsernameProblemLanguageResultExecution timeMemory
1160779fryingducAncient Machine (JOI21_ancient_machine)C++20
100 / 100
41 ms6372 KiB
#include "Anna.h" #include "bits/stdc++.h" using namespace std; namespace { template<class T> ostream &operator << (ostream &os, vector<T> v) { int D = v.size(); os << "{"; for (int i = 0; i < D; ++i) { os << (i ? ", " : "") << v[i]; } return os << "}"; } void __print() { cerr << "] " << endl; } template<class T, class... V> void __print(T t, V... v) { cerr << t; if (sizeof...(v)) { cerr << ", "; } __print(v...); } #define debug(x...) cerr << "[" << #x << "] = ["; __print(x); } void Anna(int N, vector<char> S) { vector<bool> s(N, 0); bool flag = 0; int cnt = 0; for (int i = 0; i < (int)S.size(); ++i) { if (S[i] == 'X' and !flag) { flag = 1; s[i] = 1; int cur = 1; while (i + cur < (int)S.size() and S[i + cur] == 'Z') ++cur; if (cur > 1) { i = i + cur - 1; cnt = cur - 1; } } else if (S[i] == 'Z' and flag) { int cur = i; while (cur < (int)S.size() and S[cur] == 'Z') { ++cur; } s[cur - 1] = 1; i = cur - 1; } } vector<long long> f(80); f[1] = 1; for (int i = 2; i < 80; ++i) { f[i] = f[i - 1] + f[i - 2]; } int BIT = 44; int LEN = 63; // debug(s, cnt); for (int i = 0; i < N; i += LEN) { int r = min(N - 1, i + LEN - 1); long long cur = 0; for (int j = i; j <= r; ++j) { if (s[j]) { // debug(j, f[r - j + 2]); cur += f[r - j + 2]; } } if (__lg(cur) >= BIT) { debug(cur, __lg(cur)); } for (int j = 0; j < BIT; ++j) { Send(cur >> j & 1); } } for (int i = 0; i < 18; ++i) { Send(cnt >> i & 1); } }
#include "Bruno.h" #include "bits/stdc++.h" using namespace std; namespace { template<class T> ostream &operator << (ostream &os, vector<T> v) { int D = v.size(); os << "{"; for (int i = 0; i < D; ++i) { os << (i ? ", " : "") << v[i]; } return os << "}"; } void __print() { cerr << "] " << endl; } template<class T, class... V> void __print(T t, V... v) { cerr << t; if (sizeof...(v)) { cerr << ", "; } __print(v...); } #define debug(x...) cerr << "[" << #x << "] = ["; __print(x); } void Bruno(int N, int L, vector<int> A) { vector<int> id; vector<long long> f(80); f[1] = 1; for (int i = 2; i < 80; ++i) { f[i] = f[i - 1] + f[i - 2]; } int BIT = 44; int LEN = 63; int cur_id = 0; vector<bool> s(N + 70, 0); for (int i = 0; i + BIT - 1 < L; i += BIT) { long long x = 0; for (int j = i; j < i + BIT; ++j) { if (A[j]) { x |= (1ll << (j - i)); } } int sz = min(N - 1, cur_id + LEN - 1); for (int j = cur_id; j <= sz; ++j) { if (x >= f[sz - j + 2]) { s[j] = 1; // debug(x, f[sz - j + 2], j); x -= f[sz - j + 2]; } } cur_id = sz + 1; } int cnt = 0; for (int i = 0; i < 18; ++i) { if (A[L - 18 + i]) { cnt |= (1 << i); } } // debug(s, cnt); for (int i = 0; i < N; ++i) { if (s[i]) { id.push_back(i); } } if (id.empty()) { for (int i = 0; i < N; ++i) { Remove(i); } return; } // debug(id, cnt); for (int i = 0; i < id[0]; ++i) { Remove(i); } for (int i = id[0] + 1; i <= id[0] + cnt; ++i) { Remove(i); } int mem = id[0]; id[0] += cnt; for (int i = id.back() + 1; i < N; ++i) { Remove(i); } for (int i = 1; i < (int)id.size(); ++i) { for (int j = id[i] - 1; j > id[i - 1]; --j) { Remove(j); } Remove(id[i]); } Remove(mem); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...