# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
443725 | valerikk | Secret Permutation (RMI19_permutation) | C++17 | 1 ms | 200 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 <bits/stdc++.h>
#ifdef EVAL
#include "permutation.h"
#endif
typedef long long ll;
using namespace std;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
#ifndef EVAL
int N;
int P[256 + 10];
#endif
int query_(vector<int> v) {
#ifdef EVAL
for (int &i : v) {
i++;
}
return query(v);
#else
int sum = 0;
for (int i = 1; i < v.size(); i++)
sum += abs(P[v[i]] - P[v[i - 1]]);
return sum;
#endif
}
void answer_(vector<int> p) {
for (int &i : p) {
i++;
}
#ifdef EVAL
answer(p);
#else
for (int i = 0; i < p.size(); i++)
cout << p[i] << " ";
exit(0);
#endif
}
void solve(int n) {
if (n <= 7) {
vector<int> p(n);
iota(p.begin(), p.end(), 0);
shuffle(p.begin(), p.end(), rnd);
vector<int> d(n);
for (int i = 0; i < n; i++) {
d[p[n - 1]] = query_(p);
rotate(p.begin(), p.begin() + 1, p.end());
}
int sum = 0;
for (int i = 0; i < n; i++)
sum += d[i];
sum /= n - 1;
for (int i = 0; i < n; i++)
d[i] = sum - d[i];
do {
bool ok = true;
for (int i = 0; i < n; i++)
ok &= d[i] == abs(p[i] - p[(i + 1) % n]);
if (ok)
answer_(p);
} while (next_permutation(p.begin(), p.end()));
}
}
#ifndef EVAL
int main() {
cin >> N;
for (int i = 0; i < N; i++) {
cin >> P[i];
P[i]--;
}
solve(N);
}
#endif
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... |