Submission #1089525

#TimeUsernameProblemLanguageResultExecution timeMemory
1089525Has2008Xor Sort (eJOI20_xorsort)C++17
100 / 100
64 ms1500 KiB
#include "bits/stdc++.h" using namespace std; #define int long long #define endl endl const int mod = 1e9 + 7; const int maxn = 1e6; int n, s, arr[maxn]; vector < pair < int, int >> ans; void s1() { for (int i = n - 1; i >= 0; i--) { int p = -1; for (int j = 0; j <= i; j++) { if (p == -1 || arr[p] < arr[j]) p = j; if (j) ans.push_back({j - 1, j}); } for (int j = p + 1; j <= i; j++) ans.push_back({j, j - 1}); for (int j = p - 2; j >= 0; j--) ans.push_back({j, j + 1}); for (int j = p; j + 1 < n; j++) swap(arr[j], arr[j + 1]); } for (int i = n - 2; i >= 0; --i) ans.push_back({i, i + 1}); } void s2() { for(int i = 19; i >= 0; i--) { for(int j = 0; j < n - 1; j++) { if(arr[j + 1] >= (1 << (i + 1))) break; if(!(arr[j] & (1 << i))) continue; if(!(arr[j + 1] & (1 << i))) ans.push_back({j + 1, j}), arr[j + 1] ^= arr[j]; ans.push_back({j, j + 1}); arr[j] ^= arr[j + 1]; } } } void solve() { cin >> n >> s; for(int i = 0; i < n; i++) cin >> arr[i]; int arr2[n]; if(s == 1) s1(); else s2(); cout << ans.size() << endl; for(auto [i, j] : ans) cout << i + 1 << " " << j + 1 << endl; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int tt = 1; //cin >> tt; while(tt--) solve(); }

Compilation message (stderr)

xorsort.cpp: In function 'void solve()':
xorsort.cpp:53:9: warning: unused variable 'arr2' [-Wunused-variable]
   53 |     int arr2[n];
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...