#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;
namespace{
const int maxn = 100000;
const int T = 100;
}
void Anna(int N, vector<char> S)
{
vector<__int128> fib(105);
fib[0] = 0;
fib[1] = 1;
for(int j = 2;j < 105;++j)
{
fib[j] = fib[j-1] + fib[j-2];
}
vector<bool> str(maxn,false);
bool fl = 0;
for(int i =0;i < N;++i)
{
if(S[i] == 'X' && !fl)
{
fl = 1;
str[i] = 1;
i++;
}
else if(fl && S[i] == 'Z' && (i == N-1 || S[i+1] != 'Z'))
{
str[i] = 1;
i++;
}
}
for(int j = 0;j < maxn;j += T)
{
__int128 ans = 0;
for(int u = j;u < j+T;++u)
{
ans += str[u] * fib[u-j+2];
}
for(int u = 0;u < 70;++u)
{
Send(ans%2);
ans/=2;
}
}
// cout << "!" << endl;
return ;
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;
namespace{
const int maxn = 100000;
const int T = 100;
}
void Bruno(int N, int L, vector<int> A)
{
vector<__int128> fib(105);
fib[0] = 0;
fib[1] = 1;
for(int j = 2;j < 105;++j)
{
fib[j] = fib[j-1] + fib[j-2];
}
//cout << A.size() << endl;
vector<bool> str(maxn);
for(int j = 0;j < maxn/T;++j)
{
//cout << j << endl;
__int128 ans = 0;
for(int u = j*70+69;u >= j*70;--u)
{
ans *= 2;
ans += A[u];
}
for(int u = j*T+99;u >= j*T;--u)
{
if(ans >= fib[u-j*T+2])
{
ans -= fib[u-j*T+2];
str[u] = 1;
}
}
assert(!ans);
}
//cout << "!" << endl;
int start = 0;
for(int i = 0;i < N;++i)
{
if(str[i])
{
start = i;
break;
}
}
vector<bool> rem(N,false);
vector<int> tr;
for(int i = start+1;i < N;++i)
{
if(str[i])
{
for(int j = int(tr.size()-1);j >= 0;--j)
{
rem[tr[j]] = 1;
Remove(tr[j]);
}
tr.clear();
rem[i] = 1;
Remove(i);
}
else
tr.push_back(i);
}
for(int i = 0;i < N;++i)
{
if(!rem[i])
{
Remove(i);
}
}
//cout << "!" << endl;
return ;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |