Submission #1149181

#TimeUsernameProblemLanguageResultExecution timeMemory
1149181duckindogBroken Device (JOI17_broken_device)C++17
100 / 100
40 ms1424 KiB
#include <bits/stdc++.h> using namespace std; #include "Annalib.h" void Anna( int N, long long X, int K, int P[] ){ vector<int> per(N); iota(per.begin(), per.end(), 0); shuffle(per.begin(), per.end(), mt19937_64(149973)); vector<bool> work(N, true); for (int i = 0; i < K; ++i) work[P[i]] = false; vector<int> num; { // decompose x into base 3 while (X) { num.push_back(X % 3); X /= 3; } } auto chk = [&](int pos0, int pos1, int value) { int p0 = work[pos0], p1 = work[pos1]; int statePos = (p0 << 1) | (p1 << 0); int stateVal = value + 1; return (statePos & stateVal) == stateVal; }; for (int i = 0; i < N; i += 2) { int pos0 = per[i], pos1 = per[i + 1]; if (!num.size() || !chk(pos0, pos1, num.back())) { Set(pos0, 0); Set(pos1, 0); continue; } int statePos = num.back() + 1; num.pop_back(); Set(pos0, statePos >> 1 & 1); Set(pos1, statePos & 1); } }
#include <bits/stdc++.h> using namespace std; #include "Brunolib.h" long long Bruno( int N, int A[] ){ vector<int> per(N); iota(per.begin(), per.end(), 0); shuffle(per.begin(), per.end(), mt19937_64(149973)); long long X = 0; for (int i = 0; i < N; i += 2) { int p0 = A[per[i]], p1 = A[per[i + 1]]; if (!p0 && !p1) continue; int value = ((p0 << 1) | (p1 << 0)) - 1; X = X * 3 + value; } return X; }
#Verdict Execution timeMemoryGrader output
Fetching results...