Submission #1140219

#TimeUsernameProblemLanguageResultExecution timeMemory
1140219SangPermutation (APIO22_perm)C++20
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
using namespace std;

#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define FORD(i, a, b) for (int i = (a), _b = (b); i >= _b; i--)
#define fi first
#define se second
#define pb push_back
#define ALL(a) (a).begin(), (a).end()
#define task "kbsiudthw"

typedef vector<int> vi;
typedef pair<int, int> ii;
typedef pair<int, ii> pii;

const int N = 1e5 + 5;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 2277;

queue<int> q[95];

vector<int> construct_permutation(long long k){
   map<int, int> dist;
   --k;
   q[0].push(k);
   dist[k] = 0;
   FOR (i, 0, 90){
        while (!q[i].empty()){
            int x = q[i].front(); q[i].pop();
            if (dist[x] != i) continue;
            FOR (j, 1, 60){
                if ((1<<j) - 1 > x || i + j > 90) break;
                int nxt = x - (1<<j) + 1;
                if (dist.find(nxt) == dist.end() || dist[nxt] > i + j){
                    dist[nxt] = i + j;
                    q[i + j].push(nxt);
                }
            }
        }
   }
   vi bit;
   int s = dist[0] - 1;
   int cur = 0;
   while (cur != k){
        FOR (j, 1, 60){
            if ((1<<j) - 1 + cur > k) continue;
            int nxt = cur + (1<<j) - 1;
            if (dist.find(nxt) == dist.end()) continue;
            if (dist[nxt] + j == dist[cur]){
                bit.pb(j);
                cur = nxt;
                break;
            }
        }
    }
    vi ans;
    for (int &x : bit){
        FOR (i, s - x + 1, s) ans.pb(i);
        s -= x;
    }
    return ans;

}

int main(){
    vi ans =  construct_permutation(8);
    for (int &x : ans) cout << x << ' ';
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccVjZ0Rx.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc2hMGAE.o:perm.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status