제출 #720157

#제출 시각아이디문제언어결과실행 시간메모리
720157fuad27Xor Sort (eJOI20_xorsort)C++17
100 / 100
10 ms972 KiB
#include<bits/stdc++.h> using namespace std; int main () { int n, s; cin >> n >> s; int a[n]; for(int i = 0;i<n;i++)cin >> a[i]; vector<pair<int,int>> op; if(s==2) { for(int i = 19;i>=0;i--) { for(int j = 1;j<n;j++) { if((a[j]&(1<<i))==0 and (a[j-1]&(1<<i))!=0) { a[j]^=a[j-1]; op.push_back({j,j-1}); } if((a[j-1]&(1<<i))!=0) { if((a[j-1]^a[j])<a[j-1]) { a[j-1]^=a[j]; op.push_back({j-1,j}); } } } } cout << op.size() << "\n"; for(auto i:op) { cout << i.first+1 << " " << i.second+1 << "\n"; } } else { int x=0; for(int i = 0;i<n-1;i++) { int mx=0; for(int j = 0;j<n-i;j++) { if((a[j]^x)>(a[mx]^x))mx=j; } for(int j = 0;j<n-i;j++) { if(j!=n-1) { op.push_back({j,j+1}); a[j]^=a[j+1]; } } for(int j = mx;j<n-i-1;j++) { a[j+1]^=a[j]; op.push_back({j+1,j}); } for(int j = mx-2;j>=0;j--) { a[j]^=a[j+1]; op.push_back({j,j+1}); } x=a[n-i-1]; } a[0]^=a[1]; op.push_back({0,1}); cout << op.size() << "\n"; for(auto i:op) { cout << i.first+1 << " " << i.second+1 << "\n"; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...