Submission #743725

#TimeUsernameProblemLanguageResultExecution timeMemory
743725borisAngelovXor Sort (eJOI20_xorsort)C++17
100 / 100
8 ms1028 KiB
#include <iostream> #include <vector> using namespace std; const int maxn = 1005; int n, s; int a[maxn]; void fastIO() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } int main() { fastIO(); cin >> n >> s; for (int i = 1; i <= n; ++i) { cin >> a[i]; } vector<pair<int, int>> ans; if (s == 1) { int last = 0; for (int i = n; i > 1; --i) { int idx = 1; for (int j = 1; j <= i; ++j) { if ((a[j] ^ last) > (a[idx] ^ last)) { idx = j; } } for (int j = 1; j <= i; ++j) { if (j != n) { ans.push_back(make_pair(j, j + 1)); a[j] = (a[j] ^ a[j + 1]); } } for (int j = idx + 1; j <= i; ++j) { ans.push_back(make_pair(j, j - 1)); a[j] = (a[j] ^ a[j - 1]); } for (int j = idx - 1; j > 1; --j) { ans.push_back(make_pair(j - 1, j)); a[j - 1] = (a[j - 1] ^ a[j]); } /*for (int j = 1; j <= n; ++j) { cout << a[j] << ' '; } cout << endl;*/ last = a[i]; } ans.push_back(make_pair(1, 2)); a[1] = (a[1] ^ a[2]); } else { for (int bit = 19; bit >= 0; --bit) { for (int i = 1; i < n; ++i) { if (((a[i] & (1 << bit)) != 0) && ((a[i + 1] & (1 << bit)) == 0)) { a[i + 1] = (a[i] ^ a[i + 1]); ans.push_back(make_pair(i + 1, i)); } if (((a[i] & (1 << bit)) != 0) && ((a[i + 1] ^ a[i]) < a[i])) { a[i] = (a[i] ^ a[i + 1]); ans.push_back(make_pair(i, i + 1)); } } } } /*for (int i = 1; i <= n; ++i) { cout << a[i] << ' '; } cout << endl;*/ cout << ans.size() << endl; for (auto [x, y] : ans) { cout << x << ' ' << y << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...