Submission #963147

# Submission time Handle Problem Language Result Execution time Memory
963147 2024-04-14T15:12:05 Z kilkuwu Permutation (APIO22_perm) C++17
100 / 100
2 ms 504 KB
#include "perm.h"

#include <bits/stdc++.h>

std::vector<int> construct_permutation(long long k) {
  if (k < 4) {
    if (k == 1) return {};
    if (k == 2) return {0};
    return {1, 0};
  }

  auto v = construct_permutation(k / 4);
  int r = k % 4;

  if (r == 0) {
    v.push_back(v.size());
    v.push_back(v.size());
    return v;
  }

  if (r == 1) {
    v.push_back(v.size());
    v.push_back(v.size());
    v.insert(v.begin(), v.size());
    return v;
  }

  if (r == 2) {
    // adding two into our thing
    v.push_back(v.size());
    v.push_back(v.size());
    v.insert(v.begin() + 1, v.size());
    return v;
  }

  int p0 = std::find(v.begin(), v.end(), 0) - v.begin();
  int p1 = std::find(v.begin(), v.end(), 1) - v.begin();
  if (p1 < p0) {
    v.push_back(v.size());
    v.push_back(v.size());
    for (int& i : v) {
      if (i >= 2) {
        i++;
      }
    }
    v.push_back(2);
    return v;
  }

  // p1 > p0
  v.push_back(v.size());
  v.push_back(v.size());
  for (int& i : v) {
    if (i >= 1) i++;
  }
  v.push_back(1);
  for (int& i : v) {
    i++;
  }
  v.push_back(0);
  return v;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 504 KB Output is correct
2 Correct 1 ms 504 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 504 KB Output is correct
2 Correct 1 ms 504 KB Output is correct
3 Correct 1 ms 344 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 388 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Correct 1 ms 352 KB Output is correct
9 Correct 1 ms 344 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 2 ms 348 KB Output is correct
12 Correct 1 ms 428 KB Output is correct
13 Correct 1 ms 344 KB Output is correct