이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
#include<map>
#include<vector>
#include<stack>
#include<iomanip>
#include<queue>
#include<set>
#include<functional>
#include<tuple>
#include<bitset>
#include<cassert>
#include<cstdint>
#include<complex>
#include<random>
#include<fstream>
#include <unordered_map>
#include <unordered_set>
using namespace std;
bool printb(bool f) {
if (f)printf("Yes\n");
else printf("No\n");
return f;
}
template<class T>
void prt(T t = "", string sep = "\n") { cout << t << sep; return; }
template<class T>
void printl(vector<T> a, string sep = " ") {
for (int i = 0; i < a.size(); i++) {
cout << a[i];
if (i != a.size() - 1)cout << sep;
}
cout << "\n";
return;
}
bool prt_isfixed = false;
template<class T>
void prt_fix(T t, string sep = "\n") {
if (!prt_isfixed) {
cout << fixed << setprecision(15);
prt_isfixed = true;
}
prt(t, sep);
}
#define all(a) a.begin(),a.end()
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#pragma GCC target "prefer-vector-width=512"
#pragma GCC optimize "Ofast"
#pragma GCC optimize("unroll-loops")
using uint = unsigned int;
using llong = long long;
using ullong = unsigned long long;
using pii = pair<int, int>;
using pll = pair<llong, llong>;
using pli = pair<llong, int>;
using pil = pair<int, llong>;
template<typename T> using vec2 = vector<vector<T>>;
template<typename T> inline bool chmin(T& a, T b) { return (a > b) ? (a = b, true) : false; }
template<typename T> inline bool chmax(T& a, T b) { return (a < b) ? (a = b, true) : false; }
bool bitIn(llong a, int b) { return ((a >> b) & 1); }
int bitCnt(llong a) {
int re = 0;
while (a > 0) {
if (a & 1)re++;
a >>= 1;
}
return re;
}
llong powL(llong n, llong i) {
llong re = 1;
while (i >= 1) {
if (i & 1) re *= n;
n *= n;
i >>= 1;
}
return re;
}
llong powL_M(llong n, llong i, llong mod) {
llong re = 1;
while (i >= 1) {
if (i & 1) {
re *= n;
re %= mod;
}
n *= n;
n %= mod;
i >>= 1;
}
return re;
}
llong cei(llong a, llong b) {
if (a % b == 0)return a / b;
else if (a < 0) {
return a / b;
}
else {
return a / b + 1;
}
}
llong flo(llong a, llong b) {
if (a % b == 0)return a / b;
else if (a < 0) {
return a / b - 1;
}
else {
return a / b;
}
}
int dx[4] = { 0,1,0,-1 }, dy[4] = { 1,0,-1,0 };
int dx2[8] = { -1,-1,1,1,-1,-1,1,1 }, dy2[8] = { 1,-1,-1,1,1,-1,-1,1 };
int dx8[8] = { 0,1,1,1,0,-1,-1,-1 }, dy8[8] = { -1,-1,0,1,1,1,0,-1 };
#include "perm.h"
std::vector<int> construct_permutation(long long k){
k--;//空配列のぶん抜く
int base = 0;
rep(i, 61) {
if (i == 0)continue;
llong nu = (llong(1) << i) - 1;
if (k >= nu) {
base = i;
}
}
k -= (llong(1) << base)-1;
vector<int> re;
int ma = base + bitCnt(k) - 1;
rep(i, base) {
if (bitIn(k, i)) {
re.push_back(ma);
ma--;
}
re.push_back(i);
}
return re;
}
/*
int main() {
llong k;
cin >> k;
printl(construct_permutation(k));
}//*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |