Submission #465997

#TimeUsernameProblemLanguageResultExecution timeMemory
465997Sench2006Xor Sort (eJOI20_xorsort)C++14
100 / 100
68 ms992 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ar array #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define lb lower_bound #define ub upper_bound #define FOR(i, a, b) for(auto i = a; i < b; i++) #define FORD(i, a, b) for(auto i = a - 1; i >= b; i--) #define trav(x, v) for(auto x : v) #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // ---------------------------------------- Solution ---------------------------------------- // const int N = 1005; int s, n; int a[N], b[N]; void solve1() { vector <pair<int, int>> ans; FOR(i, 1, n + 1) b[i] = a[i]; FOR(i, 1, n) a[i] ^= a[i + 1], ans.push_back(make_pair(i, i + 1)); int lastMx = 0; FOR(i, 0, n - 1) { lastMx = 0; FOR(j, 1, n - i + 1) if (b[j] > b[lastMx]) lastMx = j; FOR(j, lastMx + 1, n - i + 1) a[j] ^= a[j - 1], ans.push_back(make_pair(j, j - 1)), swap(b[j], b[j - 1]); FOR(j, max(lastMx - 1, 1), n - i) a[j] ^= a[j + 1], ans.push_back(make_pair(j, j + 1)); } cout << ans.size() << endl; FOR(i, 0, ans.size()) { cout << ans[i].first << " " << ans[i].second << endl; } } void solve2() { vector <pair<int, int>> ans; for(int i = 1; i <= (1 << 20); i *= 2) { FOR(j, 1, n) { if((i&a[j])) { if(!(i&a[j + 1])) { ans.push_back({j + 1,j}); a[j + 1] ^= a[j]; } ans.push_back({j, j + 1}); a[j] ^= a[j + 1]; } } } cout << ans.size() << endl; FOR(i, 0, ans.size()) { cout << ans[i].first << " " << ans[i].second << endl; } } void solve() { cin >> n >> s; FOR(i, 1, n + 1) { cin >> a[i]; } if (s == 1) solve1(); else solve2(); } int main() { fastio; int tests = 1; // cin >> tests; while (tests--) { solve(); } return 0; }

Compilation message (stderr)

xorsort.cpp: In function 'void solve1()':
xorsort.cpp:12:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 | #define FOR(i, a, b) for(auto i = a; i < b; i++)
......
   36 |     FOR(i, 0, ans.size()) {
      |         ~~~~~~~~~~~~~~~~                
xorsort.cpp:36:5: note: in expansion of macro 'FOR'
   36 |     FOR(i, 0, ans.size()) {
      |     ^~~
xorsort.cpp: In function 'void solve2()':
xorsort.cpp:12:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 | #define FOR(i, a, b) for(auto i = a; i < b; i++)
......
   56 |     FOR(i, 0, ans.size()) {
      |         ~~~~~~~~~~~~~~~~                
xorsort.cpp:56:5: note: in expansion of macro 'FOR'
   56 |     FOR(i, 0, ans.size()) {
      |     ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...