# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1161957 | gelastropod | Unscrambling a Messy Bug (IOI16_messy) | C++20 | 1 ms | 584 KiB |
#include <vector>
#include <bits/stdc++.h>
using namespace std;
#include "messy.h"
std::vector<int> restore_permutation(int n, int w, int r) {
int logN;
for (logN = 0; (1LL << logN) < n; logN++);
for (int i = 0; i < logN; i++) {
for (int j = 0; j < n; j++) {
if (j & (1LL << i)) continue;
string crnt = "";
for (int k = 0; k < n; k++) {
crnt += ((j ^ k ^ (1LL << (i + 1))) <= (1LL << (i + 1))) + '0';
}
cout << crnt << ' ';
add_element(crnt);
}
}
cout << '\n';
compile_set();
vector<pair<int, int>> inv(n);
for (int i = 0; i < n; i++)
inv[i].second = i;
for (int i = logN - 1; i >= 0; i--) {
vector<int> counts(1LL << (logN - i));
auto cinv = inv;
for (int j = 0; j < n; j++) {
string crnt = "";
for (int k = 0; k < n; k++) {
crnt += ((cinv[k].first ^ (1LL << i + 1)) == cinv[j].first || k == j) + '0';
}
cout << crnt << ' ';
bool res = check_element(crnt);
if (res) {
inv[j].second = counts[inv[j].first >> i];
counts[inv[j].first >> i]++;
}
else {
inv[j].second = counts[(inv[j].first >> i) + 1];
counts[(inv[j].first >> i) + 1]++;
inv[j].first += (1LL << i);
}
}
}
vector<int> ans(n);
for (int i = 0; i < n; i++) {
ans[inv[i].first] = i;
}
cout << '\n';
return ans;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |