Submission #1112247

#TimeUsernameProblemLanguageResultExecution timeMemory
1112247XingXangXongPermutation (APIO22_perm)C++17
91.33 / 100
3 ms336 KiB
#include <bits/stdc++.h> #include "perm.h" using namespace std; typedef long long ll; vector<int> dp = {-1, 0, 1}; vector<vector<int>> dpConst = {{}, {}, {0}}; int calcMin(ll id, ll k) { if (id >= k) return dp[k]; vector<int> digs; while (k > 0) digs.push_back(k % id), k /= id; reverse(digs.begin(), digs.end()); int ans = (digs.size()-1)*dp[id]; ans += dp[digs[0]]; for (int i = 1; i < digs.size(); i++) ans += dp[digs[i]+1]; return ans; } vector<int> constMin(ll id, ll k) { if (id >= k) return dpConst[k]; vector<int> digs; while (k > 0) digs.push_back(k % id), k /= id; reverse(digs.begin(), digs.end()); vector<int> ans = dpConst[digs[0]]; for (int i = 1; i < digs.size(); i++) { vector<int> aux = dpConst[id]; for (auto x : ans) aux.push_back(x+dp[id]); swap(aux, ans); aux.clear(); for (auto x : dpConst[digs[i]+1]) aux.push_back(x + ans.size()); for (auto x : ans) aux.push_back(x); swap(ans, aux); } return ans; } void init() { if (dp.size() == 5000) return; for (int k = 3; k <= 5000; k++) { int ans = 120, ansId = 2; for (int id = 2; id < dp.size(); id++) { int aux = calcMin(id, k); if (aux < ans) ans = aux, ansId = id; } dp.push_back(ans); vector<int> aux = constMin(ansId, k); dpConst.push_back(aux); } } vector<int> construct_permutation(long long k) { int resp = 120, id = 2; for (int i = 2; i < dp.size(); i++) { int aux = calcMin(i, k); if (aux < resp) resp = aux, id = i; } return constMin(id, k); }

Compilation message (stderr)

perm.cpp: In function 'int calcMin(ll, ll)':
perm.cpp:16:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     for (int i = 1; i < digs.size(); i++) ans += dp[digs[i]+1];
      |                     ~~^~~~~~~~~~~~~
perm.cpp: In function 'std::vector<int> constMin(ll, ll)':
perm.cpp:27:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |  for (int i = 1; i < digs.size(); i++)
      |                  ~~^~~~~~~~~~~~~
perm.cpp: In function 'void init()':
perm.cpp:47:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |   for (int id = 2; id < dp.size(); id++)
      |                    ~~~^~~~~~~~~~~
perm.cpp: In function 'std::vector<int> construct_permutation(long long int)':
perm.cpp:61:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   61 |  for (int i = 2; i < dp.size(); i++)
      |                  ~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...