Submission #595108

# Submission time Handle Problem Language Result Execution time Memory
595108 2022-07-13T11:18:29 Z Andyvanh1 Permutation (APIO22_perm) C++17
100 / 100
4 ms 340 KB
#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

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 time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 2 ms 340 KB Output is correct
6 Correct 2 ms 340 KB Output is correct
7 Correct 4 ms 340 KB Output is correct
8 Correct 3 ms 300 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 2 ms 340 KB Output is correct
11 Correct 3 ms 340 KB Output is correct
12 Correct 3 ms 340 KB Output is correct
13 Correct 3 ms 340 KB Output is correct