# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
974332 | IUA_Hasin | 순열 (APIO22_perm) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "perm.h"
#include <bits\stdc++.h>
#define endl "\n"
#define ll long long
using namespace std;
ll close_pow(ll n){
ll a = 1;
ll b = pow(2, a)-1;
ll ans = 1;
while(n>b){
// cout<<b<<endl;
ans++;
b = pow(2, ans)-1;
if(b>n){
ans--;
break;
} else if(b==n){
break;
}
// cout<<b<<endl;
}
return ans;
}
std::vector<int> dunno(ll n){
std::vector<int> x;
while(n>0){
ll a = close_pow(n);
// cout<<a<<endl;
x.push_back(a);
n = n-pow(2,a)+1;
}
return x;
}
std::vector<int> construct_permutation(long long k)
{
std::vector<int> v = dunno(k-1);
ll sum = 0;
ll pref[v.size()+1];
pref[0] = 0;
for(int i=0; i<v.size(); i++){
sum = sum+v[i];
pref[i+1] = pref[i]+v[i];
}
std::vector<int> ans;
ll ins = sum-1;
ll tempp = 0;
ll temp = v[tempp];
ll cnt = 0;
while(cnt<=sum-1){
for(int i=1; i<=temp; i++){
ll a = ins-temp+i;
ans.push_back(a);
cnt++;
}
ins = ins-temp;
tempp++;
temp = v[tempp];
}
// for(int i=0; i<ans.size(); i++){
// cout << ans[i] << " ";
// }
// cout<<endl;
return ans;
}