제출 #1135066

#제출 시각아이디문제언어결과실행 시간메모리
1135066skyciaXor Sort (eJOI20_xorsort)C++20
65 / 100
39 ms1224 KiB
#include <bits/stdc++.h> using namespace std; vector<int> liczby; int wynik = 0; vector<pair<int, int>> zmiany; void zmien(int a, int b) { swap(liczby[a], liczby[b]); wynik += 3; zmiany.push_back({a, b}); zmiany.push_back({b, a}); zmiany.push_back({a, b}); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, p, akt; cin >> n >> p; for (int i = 0; i < n; i++) { cin >> akt; liczby.push_back(akt); } if (p == 1) { int zmiana = 1; while (zmiana) { zmiana = 0; for (int i = 0; i < n - 1; i++) { if (liczby[i] > liczby[i + 1]) { zmiana = 1; zmien(i, i + 1); } } } } else { int maxpot = 1; for (auto i : liczby) { while (i >= 2 * maxpot) { maxpot *= 2; } } cerr << maxpot; int ilemniej = 1; while (maxpot >= 1) { int mogepominac = 1; for (int i = 0; i < n - ilemniej; i++) { if (mogepominac && liczby[i] < maxpot) { continue; } if (liczby[i] > maxpot) { mogepominac = 0; } if (liczby[i + 1] < maxpot) { zmiany.push_back({i + 1, i}); wynik++; liczby[i + 1] = (liczby[i + 1] ^ liczby[i]); } zmiany.push_back({i, i + 1}); wynik++; liczby[i] = (liczby[i] ^ liczby[i + 1]); } ilemniej++; maxpot /= 2; } } cout << wynik << endl; for (auto i : zmiany) { cout << i.first + 1 << ' ' << i.second + 1 << endl; } // for (auto i : liczby) // { // cerr << i << ' '; // } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...