# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1078827 | raphaelp | Broken Device (JOI17_broken_device) | C++14 | 3 ms | 860 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 "Annalib.h"
#include <bits/stdc++.h>
using namespace std;
void Anna(int N, long long X, int K, int P[])
{
map<vector<int>, vector<int>> M;
M[{1, 1}] = {1, 1, 1};
M[{1}] = {1, 1, 0};
M[{1, 0}] = {1, 0, 1};
M[{0}] = {1, 0, 0};
M[{0, 1}] = {0, 1, 1};
M[{0, 0}] = {0, 1, 0};
vector<int> P2(N);
for (int i = 0; i < K; i++)
P2[P[i]] = 1;
vector<int> ans(N);
int buff = 0;
vector<int> bits;
while (X)
{
bits.push_back(X % 2);
X /= 2;
}
reverse(bits.begin(), bits.end());
for (int i = 0; i < N; i += 3)
{
if (buff == bits.size())
break;
vector<int> temp;
if (P2[i] + P2[i + 1] + P2[i + 2] > 1)
continue;
if (P2[i] == 1)
{
if (bits[buff] == 1)
{
temp = {0, 0, 1};
buff++;
}
else if (buff < bits.size() - 1 && bits[buff] == 0)
{
temp = M[{bits[buff], bits[buff + 1]}];
buff += 2;
}
}
else if (P2[i + 1] == 1)
{
if (bits[buff] == 1)
temp = {0, 0, 1};
else
temp = {1, 0, 0};
buff++;
}
else if (P2[i + 2] == 1)
{
if (bits[buff] == 1)
temp = {1, 1, 0};
else
temp = {1, 0, 0};
}
else
{
if (buff < bits.size() - 1)
{
temp = M[{bits[buff], bits[buff + 1]}];
buff += 2;
}
else
{
temp = M[{bits[buff]}];
buff++;
}
}
ans[i] = temp[0], ans[i + 1] = temp[1], ans[i + 2] = temp[2];
}
for (int i = 0; i < N; i++)
{
// cout << ans[i] << ' ';
Set(i, ans[i]);
}
}
/*int main()
{
long long N, X, K;
cin >> N >> X >> K;
long long P[N];
srand(time(0));
for (long long i = 0; i < K; i++)
P[i] = rand() % N;
Anna(N, X, K, P);
}*/
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;
long long Bruno(int N, int A[])
{
map<vector<int>, vector<int>> M;
M[{1, 1, 1}] = {1, 1};
M[{1, 1, 0}] = {1};
M[{1, 0, 1}] = {1, 0};
M[{1, 0, 0}] = {0};
M[{0, 1, 1}] = {0, 1};
M[{0, 1, 0}] = {0, 0};
M[{0, 0, 1}] = {1};
long long X = 0;
for (int i = 0; i < N; i += 3)
{
vector<int> temp = {A[i], A[i + 1], A[i + 2]};
if (temp[0] + temp[1] + temp[2] == 0)
continue;
else
temp = M[temp];
for (int j = 0; j < temp.size(); j++)
{
X *= 2;
X += temp[j];
}
}
return X;
}
/*int main()
{
int N;
cin >> N;
int A[N];
for (int i = 0; i < N; i++)
cin >> A[i];
cout << Bruno(N, A);
}*/
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |