답안 #984164

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
984164 2024-05-16T10:53:47 Z Izaz 순열 (APIO22_perm) C++17
0 / 100
0 ms 348 KB
#include <bits/stdc++.h>
using namespace std;
 
#define f first
#define s second
#define mn(a,b) min(a,b)
#define mx(a,b) max(a,b)
#define ll long long
#define int ll
ll power[61];
int re(ll k){
	for(int i = 0 ; i < 61 ;i++){
		if(power[i]>k)return i-1;
	}
	return 61;
}
vector<int>Solve(vector<int>vec , int Now_adding, int k){
	if(k == 0 ){
		return vec;
	}
 
	int MAXI = re(k);
	vector<int>AL;
	int x = vec.size();
	for(int i = 0 ; i < x;i++){
		if(i == MAXI){
			AL.push_back(Now_adding);
		}
		AL.push_back(vec[i]);
	}
	if(MAXI == x)AL.push_back(Now_adding);
	return Solve(AL,Now_adding+1,k - (power[MAXI]));
}
vector<int> construct_permutation(long long  k)
{
	ll Num =  1;
	k -- ;
	power[0] = 1;
	for(int i = 1;i<=60;i++){
		Num*=2;
		power[i] = Num;
	}
	vector<vector<int>>Answer;
	vector<int>My_Answer;
	int Last =-1; 
	for(int i = 0 ; i < 10000;i ++) { 
		My_Answer.push_back(i);
		ll Num2 = (i - Last + 1);
		if(power[Num2]-1>k){
		k-=power[i-Last]-1;
		Answer.push_back(Solve(My_Answer,i+1,k));
		break;
		}
	}
	reverse(Answer.begin(),Answer.end());
	vector<int>Ans2;
	for(auto x:Answer){
		for(auto y: x)Ans2.push_back(y);
	}
   return Ans2;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -