# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
853843 | danikoynov | Ancient Machine (JOI21_ancient_machine) | C++17 | 194 ms | 88140 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "Anna.h"
#include <vector>
#include <bits/stdc++.h>
const int maxbit = 24;
int to[(1 << maxbit)], rev[(1 << maxbit)];
void create_matching()
{
int cnt = 0;
for (int mask = 0; mask < (1 << maxbit); mask ++)
{
bool tf = true;
for (int bit = 1; bit < maxbit; bit ++)
{
if ((mask & (1 << bit)) > 0 && (mask & (1 << (bit - 1))) > 0)
{
tf = false;
break;
}
}
if (!tf)
continue;
to[mask] = cnt;
rev[cnt] = mask;
cnt ++;
}
}
const int tobit = 18;
std::vector < int > go_to_fibonacci(std::vector < int > seq)
{
std::vector < int > res;
int last = 0;
for (int i = 0; i < seq.size(); i ++)
{
last = last + seq[i] * (1 << (i % maxbit));
if ((i % maxbit) == maxbit - 1)
{
int x = to[last];
for (int bit = 0; bit < tobit; bit ++)
{
if ((x & (1 << bit)) > 0)
res.push_back(1);
else
res.push_back(0);
}
last = 0;
}
}
if (seq.size() % maxbit != 0)
{
int x = to[last];
for (int bit = 0; bit < tobit; bit ++)
{
if ((x & (1 << bit)) > 0)
res.push_back(1);
else
res.push_back(0);
}
}
return res;
}
void Anna(int N, std::vector<char> S)
{
create_matching();
std::vector < int > seq;
for (int i = 0; i < N; i ++)
{
if (S[i] == 'Z' && (i == N - 1 || S[i + 1] != 'Z'))
seq.push_back(1);
else
seq.push_back(0);
}
seq = go_to_fibonacci(seq);
///std::cout << seq.size() << std::endl;
for (int i = 0; i < seq.size(); i ++)
Send(seq[i]);
///std:: cout << "size " << seq.size() << std::endl;
int pt = 0;
while(pt < N && S[pt] != 'X')
pt ++;
for (int bit = 0; bit < 20; bit ++)
{
if ((pt & (1 << bit)) > 0)
Send(1);
else
Send(0);
}
}
#include "Bruno.h"
#include <vector>
#include <iostream>
#include <bits/stdc++.h>
namespace
{
const int maxn = 1e5 + 10;
int variable_example = 0;
int FunctionExample(int P)
{
return 1 - P;
}
char c[maxn];
} // namespace
void sub_solve()
{
}
const int MAXBIT = 24;
int TO[(1 << MAXBIT)], REV[(1 << MAXBIT)];
void build_matching()
{
int cnt = 0;
for (int mask = 0; mask < (1 << MAXBIT); mask ++)
{
bool tf = true;
for (int bit = 1; bit < MAXBIT; bit ++)
{
if ((mask & (1 << bit)) > 0 && (mask & (1 << (bit - 1))) > 0)
{
tf = false;
break;
}
}
if (!tf)
continue;
TO[mask] = cnt;
REV[cnt] = mask;
cnt ++;
}
}
const int TOBIT = 18;
std::vector < int > go_to_binary(std::vector < int > seq)
{
build_matching();
std::vector < int > res;
int last = 0;
for (int i = 0; i < seq.size(); i ++)
{
last = last + seq[i] * (1 << (i % TOBIT));
if ((i % TOBIT) == TOBIT - 1)
{
int x = REV[last];
for (int bit = 0; bit < MAXBIT; bit ++)
{
if ((x & (1 << bit)) > 0)
res.push_back(1);
else
res.push_back(0);
}
last = 0;
}
}
int x = REV[last];
for (int bit = 0; bit < MAXBIT; bit ++)
{
if ((x & (1 << bit)) > 0)
res.push_back(1);
else
res.push_back(0);
}
return res;
}
void Bruno(int N, int L, std::vector<int> A)
{
int main_lenght = N / MAXBIT;
if (N % MAXBIT != 0)
main_lenght ++;
main_lenght *= TOBIT;
///std::cout << main_lenght << std::endl;
int pt = 0;
assert(A.size() == main_lenght + 20);
for (int bit = 0; bit < 20; bit ++)
{
pt = pt + A[bit + main_lenght] * (1 << bit);
}
///assert(pt >= 0 && pt <= N);
for (int i = 0; i < pt; i ++)
Remove(i);
for (int i = 0; i < 20; i ++)
A.pop_back();
A = go_to_binary(A);
assert(A.size() >= N);
std::vector < int > zpos;
for (int i = pt; i < N; i ++)
{
if (A[i] == 1)
zpos.push_back(i);
}
int last = pt;
for (int i = 0; i < zpos.size(); i ++)
{
for (int j = zpos[i] - 1; j > last; j --)
Remove(j);
Remove(zpos[i]);
last = zpos[i];
}
for (int i = N - 1; i > last; i --)
Remove(i);
if (pt != N)
Remove(pt);
/**for (int i = 0; i < N; i ++)
std::cout << c[i] << " ";
std::cout << std::endl;*/
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |