//
// --- Sample implementation for the task swaps ---
//
// To compile this program with the sample grader, place:
// swaps.h swaps_sample.cpp sample_grader.cpp
// in a single folder and run:
// g++ swaps_sample.cpp sample_grader.cpp
// in this folder.
//
#include "swaps.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const ll MOD = 998244353;
const ll INF = 1e18;
const ld EPS = 1e-12;
#define endl "\n"
#define sp <<" "<<
#define REP(i, a, b) for(ll i = a; i < b; i++)
#define dbg(x) cout << #x << " = " << x << endl
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define fast_io() ios_base::sync_with_stdio(false); cin.tie(NULL)
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define sz(x) ((ll)(x).size())
struct custom_hash {
static uint64_t splitmix64(uint64_t x) {
// http://xorshift.di.unimi.it/splitmix64.c
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator()(uint64_t x) const {
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};
template <typename Key, typename Value>
using hash_map = unordered_map<Key, Value, custom_hash>;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
// uniform_int_distribution<int>(a, b)(rng);
// shuffle(all(a), rng);
void solve(int n, int v) {
// st 1-2
// int m = n;
// vector<pair<int, int>> cnt(n+1);
// REP(i, 1, n+1) {
// cnt[i] = {0, i};
// }
// vector<int> a(n), ans(n);
// iota(all(a), 1);
// if (n % 2) a.push_back(n+1), m++;
// auto steal = [&](vector<pair<int, int>> &queries) -> void {
// for (auto &[a, b] : queries) {
// schedule(a, b);
// }
// vector<int> res = visit();
// REP(i, 0, queries.size()) {
// if (res[i] == 1) {
// cnt[queries[i].first].first++;
// } else {
// cnt[queries[i].second].first++;
// }
// }
// };
// REP(i, 0, m - 1) {
// vector<pair<int, int>> queries;
// REP(j, 0, m / 2) {
// int p1 = a[j], p2 = a[m - j - 1];
// if (p1 != n+1 and p2 != n+1) {
// queries.push_back({p1, p2});
// }
// }
// steal(queries);
// vector<int> b(m);
// b[0] = a[0], b[1] = a[m-1];
// REP(i, 2, m) {
// b[i] = a[i-1];
// }
// a.swap(b);
// }
// sort(all(cnt));
// REP(i, 1, n+1) {
// ans[i-1] = cnt[i].second;
// }
// reverse(all(ans));
// answer(ans);
// st 3-5
int m = n;
vector<int> a(n), ans(n);
iota(all(a), 1);
if (n % 2) a.push_back(n+1), m++;
auto left = [&]() -> void {
for (int i = 1; i < n; i+=2) {
schedule(i, i+1);
}
visit();
};
auto right = [&]() -> void {
for (int i = 2; i < n; i+=2) {
schedule(i, i+1);
}
visit();
};
REP(i, 0, v) {
if (i % 2 == 0) {
left();
} else {
right();
}
}
iota(all(ans), 1);
answer(ans);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |