Submission #1179382

#TimeUsernameProblemLanguageResultExecution timeMemory
1179382khusanov45Ancient Machine (JOI21_ancient_machine)C++17
0 / 100
35 ms6592 KiB
#include "Anna.h" #include <vector> #include <iostream> using namespace std; #define ll long long namespace { vector<ll> fib; void initFib() { fib.push_back(0); fib.push_back(1); for (int i = 2; i <= 66; ++i){ fib.push_back(fib[i-2] + fib[i-1]); } } ll handleArray(vector<bool> & b, int l, int r) { ll score = 0; for (int i = l; i < min(b.size(), size_t(r)); ++i){ score += b[i] * fib[r-i]; } return score; } void sendSignals(ll x){ for (int i = 43; i >= 0; --i){ Send((x >> i) & 1); } } } void Anna(int N, vector<char> S) { initFib(); vector<bool> b(N, 0); int i = -1; while (++i < N && S[i] != 'X'); if (i == N){ return; } b[i++] = 1; for (; i < N; ++i){ if (i + 1 < N && S[i] == S[i+1]){ continue; } b[i] = S[i] == 'Z'; } for (int l = 0; l < N; l += 64){ ll permutation = handleArray(b, l, l+64); sendSignals(permutation); } }
#include "Bruno.h" #include <vector> #include <iostream> using namespace std; #define ll long long namespace { vector<ll> fib; void initFib() { fib.push_back(0); fib.push_back(1); for (int i = 2; i <= 66; ++i){ fib.push_back(fib[i-2] + fib[i-1]); } } ll getNumber(vector<int> & a, int start){ ll ans = 0; for (int i = start; i < start + 44; ++i){ ans <<= 1; ans += a[i]; } return ans; } void deriveSequence(ll number, vector<int> & result){ for (int i = 64; i >= 1; --i){ if (fib[i] <= number){ number -= fib[i]; result.push_back(1); } else{ result.push_back(0); } } } } void Bruno(int N, int L, std::vector<int> A) { if (L == 0){ for (int i = 0; i < N; ++i){ Remove(i); } return; } initFib(); // for (auto & it : A){ // cout << it; // } // cout << endl; vector<int> result; for (int l = 0; l < L; l += 44){ ll number = getNumber(A, l); //cout << number << endl; deriveSequence(number, result); } for (auto & it : result){ cout << it; } cout << endl; vector<int> ones; for (int i = 0; i < result.size(); ++i){ if (result[i] == 1){ ones.push_back(i); } } // PreX for (int i =0; i != ones.front();++i){ Remove(i); } for (int i = 1; i < ones.size(); ++i){ for (int j = ones[i]-1; j > ones[i-1]; --j){ Remove(j); } Remove(ones[i]); } Remove(ones[0]); // cout << ones.back()+1 << endl; // cout << N << endl; for (int j = ones.back()+1; j < N; ++j){ Remove(j); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...