Submission #1025342

#TimeUsernameProblemLanguageResultExecution timeMemory
1025342tolbiXor Sort (eJOI20_xorsort)C++17
40 / 100
42 ms1128 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n,s;cin>>n>>s;
	vector<int> arr(n);
	for (int i = 0; i < n; ++i)
	{
		cin>>arr[i];
	}
	vector<pair<int,int>> ansarr;
	for (int bit = 22; bit >= 0; bit--){
		for (int i = 0; i+1 < n; i++){
			if (arr[i]&(1LL<<bit)){
				if (arr[i+1]&(1LL<<bit)){
					ansarr.push_back({i+1,i+2});
					arr[i]^=arr[i+1];
				}
				else {
					ansarr.push_back({i+2,i+1});
					ansarr.push_back({i+1,i+2});
					arr[i+1]^=arr[i];
					arr[i]^=arr[i+1];
				}
			}
		}
		if ((n>1) && (arr[n-1]&(1LL<<bit))){
			n--;
		}
	}
	for (int i = 1; i < arr.size(); i++){
		assert(arr[i]>=arr[i-1]);
	}
	cout<<ansarr.size()<<endl;
	for (int i = 0; i < ansarr.size(); ++i)
	{
		cout<<ansarr[i].first<<" "<<ansarr[i].second<<endl;
	}
}

Compilation message (stderr)

xorsort.cpp: In function 'int main()':
xorsort.cpp:33:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |  for (int i = 1; i < arr.size(); i++){
      |                  ~~^~~~~~~~~~~~
xorsort.cpp:37:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |  for (int i = 0; i < ansarr.size(); ++i)
      |                  ~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...