Submission #534810

#TimeUsernameProblemLanguageResultExecution timeMemory
534810skittles1412The Collection Game (BOI21_swaps)C++17
50 / 100
483 ms680 KiB
#include "swaps.h" #include "bits/extc++.h" using namespace std; template <typename T> void dbgh(const T& t) { cerr << t << endl; } template <typename T, typename... U> void dbgh(const T& t, const U&... u) { cerr << t << " | "; dbgh(u...); } #ifdef DEBUG #define dbg(...) \ cerr << "L" << __LINE__ << " [" << #__VA_ARGS__ << "]" \ << ": "; \ dbgh(__VA_ARGS__) #else #define cerr \ if (false) \ cerr #define dbg(...) #endif #define endl "\n" #define long int64_t #define sz(x) int((x).size()) const int maxn = 505; namespace s1 { void sch(int a, int b) { schedule(a + 1, b + 1); } void answ(vector<int> arr) { for (auto& a : arr) { a++; } answer(arr); exit(0); } bool solve(int n, int m) { if (m < 1000) { return false; } bool arr[maxn][maxn] {}; for (int i = 0; i < n; i++) { vector<pair<int, int>> vals; for (int j = 0; j < n; j++) { int x = (n + i - j) % n; if (x < j) { vals.emplace_back(j, x); sch(j, x); } } vector<int> res = visit(); int rind = 0; for (auto& [a, b] : vals) { int c = res[rind++]; arr[a][b] = c; arr[b][a] = c ^ 1; } } vector<int> ord(n); iota(begin(ord), end(ord), 0); sort(begin(ord), end(ord), [&](int a, int b) -> bool { if (a == b) { return false; } return arr[a][b]; }); answ(ord); return true; } } int perm[maxn]; vector<pair<int, int>> queued; void init() { iota(begin(perm), end(perm), 1); } void mschedule(int a, int b) { queued.emplace_back(a, b); } void mvisit() { if (!sz(queued)) { return; } for (auto& [a, b] : queued) { schedule(perm[a], perm[b]); } vector<int> res = visit(); int rind = 0; for (auto& [a, b] : queued) { if (!res[rind++]) { swap(perm[a], perm[b]); } } queued.clear(); } void manswer(int n) { answer(vector<int>(perm, perm + n)); } namespace s2 { bool solve(int n, int m) { for (int i = 0; i < m; i += 2) { for (int j = 1; j + 1 < n; j += 2) { mschedule(j, j + 1); } mvisit(); for (int j = 0; j + 1 < n; j += 2) { mschedule(j, j + 1); } mvisit(); } manswer(n); return true; } } void solve(int n, int m) { init(); s2::solve(n, m); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...