Submission #595108

#TimeUsernameProblemLanguageResultExecution timeMemory
595108Andyvanh1Permutation (APIO22_perm)C++17
100 / 100
4 ms340 KiB
#include "perm.h" #include <bits/stdc++.h> using namespace std; std::vector<int> construct_permutation(long long k){ int Max = 0; int cur = 0; for(int i = 0; i < 60; i++){ if((((long long)1)<<i)&k){ Max = i; cur++; } } cur--; vector<int> ans(Max); for(int i = 0; i < Max; i++){ ans[i] = i; } vector<int> proc; for(int i = Max-1; i>=0; i--){ if((((long long)1)<<i)&k)proc.push_back(i); } vector<int> rlproc; if(proc.size()<=31){ rlproc = proc; }else{ vector<vector<int>> zz; int at = 2; vector<int> curvec; while(at<proc.size()-1){ if(proc[at]-proc[at+1]==1){ curvec.push_back(at); curvec.push_back(at+1); at+=2; }else{ at+=1; if(!curvec.empty()){ at++; zz.push_back(curvec); curvec.clear(); } } } if(!curvec.empty()){ zz.push_back(curvec); } int curat = 0; for(auto& e: zz){ for(;curat<e[0]-2;curat++){ rlproc.push_back(curat); } for(int i = 1; i < e.size(); i+=2){ rlproc.push_back(e[i]); } rlproc.push_back(curat); rlproc.push_back(curat+1); curat = e[e.size()-1]+1; } for(;curat<proc.size();curat++){ rlproc.push_back(curat); } for(int i = 0; i < rlproc.size(); i++){ rlproc[i] = proc[rlproc[i]]; } } for(int i = 0; i<rlproc.size(); i++){ vector<int> copyans; int j = 0; if(rlproc[i]!=0) { for (;ans[j]!=rlproc[i]; j++) { copyans.push_back(ans[j]); } } copyans.push_back(Max); Max++; for(;j<ans.size();j++){ copyans.push_back(ans[j]); } ans = copyans; } return ans; }

Compilation message (stderr)

perm.cpp: In function 'std::vector<int> construct_permutation(long long int)':
perm.cpp:32:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |         while(at<proc.size()-1){
      |               ~~^~~~~~~~~~~~~~
perm.cpp:55:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |             for(int i = 1; i < e.size(); i+=2){
      |                            ~~^~~~~~~~~~
perm.cpp:62:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |         for(;curat<proc.size();curat++){
      |              ~~~~~^~~~~~~~~~~~
perm.cpp:65:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |         for(int i = 0; i < rlproc.size(); i++){
      |                        ~~^~~~~~~~~~~~~~~
perm.cpp:70:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |     for(int i = 0; i<rlproc.size(); i++){
      |                    ~^~~~~~~~~~~~~~
perm.cpp:81:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |         for(;j<ans.size();j++){
      |              ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...