# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1054520 | bachhoangxuan | Secret Permutation (RMI19_permutation) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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;
}
}