Submission #1183692

#TimeUsernameProblemLanguageResultExecution timeMemory
1183692kl0989eThe Collection Game (BOI21_swaps)C++20
100 / 100
2 ms424 KiB
#include "swaps.h" #include <bits/stdc++.h> using namespace std; #pragma GCC optimize("Ofast") #define ll long long #define fi first #define se second #define pb push_back #define vi vector<int> #define vl vector<ll> #define pi pair<int, int> #define pl pair<ll,ll> #define all(x) (x).begin(),(x).end() vector<pi> ops; void custom_schedule(int a, int b, int n) { ops.pb({a,b}); if (a<=n && b<=n) { schedule(a,b); } } vi custom_visit(int n) { vi t=visit(); vi ret; int pt=0; for (int i=0; i<ops.size(); i++) { if (ops[i].fi>n || ops[i].se>n) { ret.pb((-ops[i].fi) > (-ops[i].se)); } else { ret.pb(t[pt++]); } } ops.clear(); return ret; } void solve(int n, int v) { int m=n; while (__builtin_popcount(m)!=1) { m++; } vi ord(m); iota(all(ord),1); for (int k=2; k<=m; k*=2) { for (int j=k/2; j>0; j/=2) { for (int i=0; i<m; i++) { int l=i^j; if (l>i) { custom_schedule(ord[i],ord[l],n); } } vi temp=custom_visit(n); int pt=0; for (int i=0; i<m; i++) { int l=i^j; if (l>i) { if (((i&k)==0 && temp[pt]==0) || ((i&k)!=0 && temp[pt]==1)) { swap(ord[i],ord[l]); } pt++; } } } } while (ord.size()>n) { ord.pop_back(); } answer(ord); }
#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...