제출 #1061200

#제출 시각아이디문제언어결과실행 시간메모리
1061200Muhammet순열 (APIO22_perm)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#include "perm.h"
#include "grader.cpp"

using namespace std;

#define ll long long
#define sz(s) (int)s.size()

const ll M = 1e18+1;

ll f(vector <int> v){
    int n = sz(v);
    vector <ll> dp(n,1);
    for(int i = 0; i < n; i++){
        for(int j = 0; j < i; j++){
            if(v[j] < v[i]){
            	if(M-dp[j] < dp[i]) return M;
            	dp[i] += dp[j];
            }
        }
    }

    ll k = 0;
    for(int i = 0; i < n; i++){
    	if(M-dp[i] < k) return M;
        k += dp[i];
    }
    return k+1;
}

vector<int> construct_permutation(ll k){
	int x = -1;
	vector <int> v;
	int t = 1000;
	bool tr1 = 0;
	while(t--){
		x++;
		v.push_back(x);
		ll y = f(v);
		if(y == k){
			tr1 = 1;
			break;
		}
		if(y <= k) continue;
		for(int i = sz(v)-2; i >= 0; i--){
			swap(v[i],v[i+1]);
			y = f(v);
			if(y <= k) break;
		}
		if(y == k){
			tr1 = 1;
			break;
		}
	}
	x = -1;
	vector <int> v3 = v;
	deque <int> v2;
	bool tr = 1;
	while(k > 0){
		vector <int> v1;
		ll k1 = 2;
		x++;
		v1.push_back(x);
		while((k1-1+tr) < k){
			if(k/2 < (k1-1+tr)) break;
			x++;
			v1.push_back(x);
			k1 *= 2;
		}
		if(k1-1+tr > k){
			k1 /= 2;
			v1.pop_back();
			x--;
		}
		k -= (k1-1+tr);
		for(int i = sz(v1)-1; i >= 0; i--){
			v2.push_front(v1[i]);
		}
		tr = 0;
	}
	v.clear();
	for(int i = 0; i < sz(v2); i++){
		v.push_back(v2[i]);
	}
	if(f(v3) == k){
		return v3;
	}
	else {
		return v;
	}
}

컴파일 시 표준 에러 (stderr) 메시지

perm.cpp: In function 'std::vector<int> construct_permutation(long long int)':
perm.cpp:36:7: warning: variable 'tr1' set but not used [-Wunused-but-set-variable]
   36 |  bool tr1 = 0;
      |       ^~~
/usr/bin/ld: /tmp/ccZjfltb.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccR1TbLc.o:perm.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status