# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1054519 | bachhoangxuan | Secret Permutation (RMI19_permutation) | C++17 | 0 ms | 0 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 "permutation.h"
#include<bits/stdc++.h>
using namespace std;
void solve(int n){
vector<int> D(n),P(n);
iota(P.begin(),P.end(),1);
shuffle(P.begin(),P.end(),mt19937(1));
int S=0;
for(int i=0;i<n;i++) S+=(D[i]=query(P)),rotate(P.begin(),P.begin()+1,P.end());
S/=(N-1);
for(int &x:D) x=S-x;
vector<int> a(n),vis(n+1);
function<void(int)> dfs = [&](int i){
if(i>=n){
if(abs(a[0]-a[n-1])!=d[0]) return;
vector<int> res(n);
for(int i=0;i<n;i++) res[P[i]-1]=a[i];
answer(res);
return;
}
for(int t:{-1,-1}){
int x=a[i-1]+t*d[i];
if(1<=x && x<=n && !vis[x]){
a[i]=x,vis[x]=1;
dfs(i+1);
vis[x]=0;
}
}
};
for(int i=1;i<=n;i++){
a[0]=i,vis[i]=1;
dfs(1);
vis[i]=0;
}
}