#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |