Submission #1235842

#TimeUsernameProblemLanguageResultExecution timeMemory
1235842dizzy_groovyPermutation (APIO22_perm)C++20
100 / 100
1 ms328 KiB
#include "perm.h" #include <bits/stdc++.h> using namespace std; vector<int> ans(long long k, int n) { vector<int> ans(n); iota(ans.begin(), ans.end(), 0); do { int ind1, ind0; for (int i = 0; i < n; i++) { if (ans[i] == 0) ind0 = i; if (ans[i] == 1) ind1 = i; } if (ind1 > ind0) continue; vector<long long> lans(n, 0); long long su = 1; for (long long i = 0; i < n; i++) { lans[i] = 1; for (long long j = 0; j < i; j++) { if (ans[i] > ans[j]) lans[i] += lans[j]; } su += lans[i]; } if (su == k) { return ans; } } while (next_permutation(ans.begin(), ans.end())); return {-1}; } std::vector<int> construct_permutation(long long k) { if (k < 12) { /*vector<int> lans; for (int i = 1; i < k; i++) { lans.push_back(lans.size()); } reverse(lans.begin(), lans.end());*/ int i = 1; while (true) { auto tmp = ans(k, i); if (tmp[0] != -1) return tmp; i++; } } vector<int> lans = construct_permutation(k / 4); lans.push_back(lans.size()); if (k % 4 == 2) { for (auto &i : lans) i++; lans.push_back(0); } lans.push_back(lans.size()); if (k % 4 == 1) { for (auto &i : lans) i++; lans.push_back(0); } if (k % 4 == 3) { for (auto &i : lans) if (i > 1) i++; lans.push_back(2); } return lans; /*for (int i = 1; i < 90; i++) { auto tmp = ans(k, i); if (tmp[0] == -1) continue; return tmp; }*/ /*vector<int> p; long long cur = 1; for (long long i = 0; (1ll << (i + 1)) <= k; i++) { cur *= 2; p.push_back(i); } long long n = p.size(); while (k - cur > 0) { long long x = __lg(k - cur); for (auto &i : p) { if (i >= x) i++; } p.push_back(x); cur += (1ll << x); } return p;*/ }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...