Submission #958255

#TimeUsernameProblemLanguageResultExecution timeMemory
958255pragmatistPermutation (APIO22_perm)C++17
10 / 100
579 ms600 KiB
#include "perm.h" #include<bits/stdc++.h> using namespace std; mt19937 rng(time(NULL)); unsigned long long dp[120], a[120]; int mn; vector<int> ans; void go(unsigned long long k, int n, int p[]) { for(int i = 1; i <= n; ++i) { a[i] = p[i-1]; } long long cur = 1; for(int i = 1; i <= n; ++i) { dp[i] = 1; for(int j = 1; j < i; ++j) { if(a[j]<a[i]) { dp[i] += dp[j]; } } cur += dp[i]; } while(cur<k) { vector<pair<int, long long> > b; for(int i = 1; i <= n; ++i) { b.push_back({a[i], dp[i]}); } sort(b.begin(), b.end()); long long add = 1, need = k-cur; int nxt = 0; for(auto [x, y] : b) { if(add+y<=need) { nxt = x+1; add += y; } } for(int i = 0; i <= n; ++i) { if(a[i] >= nxt) { a[i]++; } } a[++n] = nxt; dp[n] = add; cur += add; } if(cur>k) { return; } vector<int> res; for(int i = 1; i <= n; ++i) { res.push_back(a[i]); } if(n<mn) { mn = n; ans = res; } } std::vector<int> construct_permutation(long long k) { mn = 1e9; for(int n = 1; n <= 5; ++n) { int p[n]; for(int i = 0; i < n; ++i) { p[i] = i; } do { go(k, n, p); } while(next_permutation(p, p+n)); } return ans; }

Compilation message (stderr)

perm.cpp: In function 'void go(long long unsigned int, int, int*)':
perm.cpp:26:11: warning: comparison of integer expressions of different signedness: 'long long int' and 'long long unsigned int' [-Wsign-compare]
   26 |  while(cur<k) {
      |        ~~~^~
perm.cpp:41:12: warning: comparison of integer expressions of different signedness: 'long long unsigned int' and 'int' [-Wsign-compare]
   41 |    if(a[i] >= nxt) {
      |       ~~~~~^~~~~~
perm.cpp:49:8: warning: comparison of integer expressions of different signedness: 'long long int' and 'long long unsigned int' [-Wsign-compare]
   49 |  if(cur>k) {
      |     ~~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...