Submission #1092366

#TimeUsernameProblemLanguageResultExecution timeMemory
1092366efishelXor Sort (eJOI20_xorsort)C++17
100 / 100
5 ms1496 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using vll = vector <ll>; using ii = pair <ll, ll>; using vii = vector <ii>; const ll MAXN = 1E3+16; ll th[MAXN]; vii ans; vll ve; void fop (ll i, ll j) { ans.push_back({ i, j }); ve[i] ^= ve[j]; } int main () { cin.tie(nullptr) -> sync_with_stdio(false); ll n, s; cin >> n >> s; if (s == 2) { ve = vll(n); for (ll &i : ve) cin >> i; ll nend = n; for (ll bit = 19; bit >= 0; bit--) { vll th = ve; for (ll &i : th) i = i>>bit&1; ll j = find(th.begin(), th.begin()+nend, 1) - th.begin(); for (ll i = j+1; i < nend; i++) { if (th[i]) continue; fop(i, i-1); } for (ll i = j+1; i < nend; i++) { fop(i-1, i); } if (j != nend) nend--; } cout << ans.size() << '\n'; for (auto [i, j] : ans) cout << i+1 << ' ' << j+1 << '\n'; return 0; } vll ve(n); for (ll &i : ve) cin >> i; ::ve = ve; for (ll in = n; in >= 1; in--) { for (ll i = 0; i < in-1; i++) { fop(i, i+1); } ll j = max_element(ve.begin(), ve.begin()+in) - ve.begin(); for (ll i = j+1; i < in; i++) { fop(i, i-1); } for (ll i = j-2; i >= 0; i--) { fop(i, i+1); } ve.erase(ve.begin()+j); } for (ll i = n-2; i >= 0; i--) { fop(i, i+1); } cout << ans.size() << '\n'; for (auto [i, j] : ans) cout << i+1 << ' ' << j+1 << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...