답안 #860145

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
860145 2023-10-11T19:20:18 Z mychecksedad 순열 (APIO22_perm) C++17
100 / 100
1 ms 348 KB
#include<perm.h>
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define MOD (1000000000+7)
#define MOD1 (998244353)
#define pb push_back
#define all(x) x.begin(), x.end()
#define en cout << '\n'
const int N = 1e6+100, M = 1e5+10, K = 22;

vector<int> solv(ll n, int mn){
	vector<int> a;
	if(n == 1) return a;
	if(n % 15 == 0){
		a = solv(n/15, mn);
		int x, y, z, w, t;
		if(a.empty()){
			x = mn, y = mn + 1, z = mn + 2, w = mn + 3, t = mn + 4;
		}else{
			x = *max_element(all(a)) + 1;
			y = x + 1;
			z = y + 1;
			w = z + 1;
			t = w + 1;
		}
		a.pb(z);
		a.pb(x);
		a.pb(y);
		a.pb(t);
		a.pb(w);
		return a;
	}
	if(n % 13 == 0){
		a = solv(n/13, mn);
		int x, y, z, w, t;
		if(a.empty()){
			x = mn, y = mn + 1, z = mn + 2, w = mn + 3, t = mn + 4;
		}else{
			x = *max_element(all(a)) + 1;
			y = x + 1;
			z = y + 1;
			w = z + 1;
			t = w + 1;
		}
		a.pb(y);
		a.pb(z);
		a.pb(t);
		a.pb(w);
		a.pb(x);
		return a;
	}
	if(n % 11 == 0){
		a = solv(n/11, mn);
		int x, y, z, w, t;
		if(a.empty()){
			x = mn, y = mn + 1, z = mn + 2, w = mn + 3, t = mn + 4;
		}else{
			x = *max_element(all(a)) + 1;
			y = x + 1;
			z = y + 1;
			w = z + 1;
			t = w + 1;
		}
		a.pb(y);
		a.pb(w);
		a.pb(t);
		a.pb(z);
		a.pb(x);
		return a;
	}
	if(n % 7 == 0){
		a = solv(n/7, mn);
		int x, y, z, w;
		if(a.empty()){
			x = mn, y = mn + 1, z = mn + 2, w = mn + 3;
		}else{
			x = *max_element(all(a)) + 1;
			y = x + 1;
			z = y + 1;
			w = z + 1;
		}
		a.pb(y);
		a.pb(w);
		a.pb(z);
		a.pb(x);
		return a;
	}
	if(n % 5 == 0){
		a = solv(n/5, mn);
		int x, y, z;
		if(a.empty()){
			x = mn, y = mn + 1, z = mn + 2;
		}else{
			x = *max_element(all(a)) + 1;
			y = x + 1;
			z = y + 1;
		}
		a.pb(y);
		a.pb(z);
		a.pb(x);
		return a;
	}
	if(n % 3 == 0){
		a = solv(n/3, mn);
		int x, y;
		if(a.empty()){
			x = mn, y = mn + 1;
		}else{
			x = *max_element(all(a)) + 1;
			y = x + 1;
		}
		a.pb(y);
		a.pb(x);
		return a;
	}
	if(n % 2 == 0){	
		a = solv(n/2, mn);
		int x;
		if(a.empty())
			x = mn;
		else
			x = *max_element(all(a)) + 1;
		a.pb(x);
		return a;
	}
	a = solv(n-1, mn+1);
	a.pb(mn);
	return a;
}


vector<int> construct_permutation(long long k){
	return solv(k, 0);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 344 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Correct 1 ms 348 KB Output is correct