제출 #1160769

#제출 시각아이디문제언어결과실행 시간메모리
1160769fryingducAncient Machine (JOI21_ancient_machine)C++20
5 / 100
285 ms6624 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; for (int i = 0; i < (int)S.size(); ++i) { if (S[i] == 'X' and !flag) { flag = 1; int cur = i + 1; s[i] = 1; while (cur < (int)S.size() and S[cur] == 'Z') { ++cur; } i = 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]; } debug(s); for (int i = 0; i < N; i += 65) { int r = min(N - 1, i + 64); long long cur = 0; for (int j = i; j <= r; ++j) { if (s[j]) { cur += f[r - j + 2]; } } debug(cur, __lg(cur)); for (int j = 0; j < 45; ++j) { Send(cur >> j & 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 cur_id = 0; vector<bool> s(N + 70, 0); for (int i = 0; i < L; i += 45) { long long x = 0; for (int j = i; j < i + 45; ++j) { if (A[j]) { x |= (1ll << (j - i)); } } int sz = min(N - 1, cur_id + 64); for (int j = cur_id; j <= sz; ++j) { if (x >= f[sz - j + 2]) { s[j] = 1; x -= f[sz - j + 2]; } } cur_id += 65; } debug(s); 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; } for (int i = 0; i < id[0]; ++i) { Remove(i); } for (int i = id.back() + 1; i < N; ++i) { Remove(i); } // debug(id); 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(id[0]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...