Submission #1025003

#TimeUsernameProblemLanguageResultExecution timeMemory
1025003Arpi2007Xor Sort (eJOI20_xorsort)C++14
100 / 100
7 ms1100 KiB
#include <iostream> #include <queue> #include <sstream> #include <fstream> #include <cmath> #include <algorithm> #include <string> #include <vector> #include <set> #include <map> #include <utility> #include <stack> #include <math.h> #include <climits> #include <stdlib.h> #include <stdio.h> #include <iomanip> using namespace std; #define ll long long #define ld long double #define ull unsigned long long #define ub upper_bound #define lb lower_bound #define ff first #define ss second #define mpr make_pair #define vi vector<int> #define vll vector<ll> #define pii pair<int,int> #define vpi vector<pii> #define pb push_back #define pob pop_back #define mii map<int,int> #define vpl vector<pair<ll, ll>> #define pll pair<ll,ll> #define all(v) v.begin(),v.end() #define sz(x) x.size() #define clr(x) x.clear() #define yes cout << "YES\n" #define no cout << "NO\n" #define print(x) cout<<"x="<<x<<endl; ll MOD = 1e9 + 7; ll MOD2 = 998244353; void fastio() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); } /* void setprecision(int x) { cout.setf(ios::fixed | ios::showpoint); cout.precision(x); } */ /*void setIO(string name = "") { if ((int)name.size() > 0) { freopen((name + ".in").c_str(), "r", stdin); freopen((name + ".out").c_str(), "w", stdout); } }*/ ll gcd(ll a, ll b) { if (b == 0) { return a; } else { return gcd(b, a % b); } } int num(int n) { ll ans = 0; while (n != 0) { ans++; n /= 10; } return ans; } ll lcm(ll a, ll b) { return (a * b) / gcd(a, b); } ll factorial(ll n) { ll ans = 1; for (int i = 1; i <= n; i++) { ans *= i; ans %= MOD2; } return ans; } bool isPrime(int n) { if (n <= 1) { return false; } if (n == 2) { return true; } for (int i = 2; i * i <= n; i++) { if (n % i == 0) return false; } return true; } int sumnum(int n) { int ans = 0; while (n != 0) { ans += n % 10; n /= 10; } return ans; } ll bpow_mod(ll a, ll b, ll mod) { ll ans = 1; while (b) { if ((b & 1) == 1) { ans *= a; ans %= mod; } b >>= 1; a *= a; a %= mod; } return ans; } int highpow2(int n) { int p = (int)log2(n); return (int)pow(2, p); } bool sortbysec(const pair<int, int>& a, const pair<int, int>& b) { return (a.second < b.second); } void precalc() { return; } const int N = 3e5 + 10; int a[1003]; void solve(){ int n, s; cin >> n >> s; for(int i = 1; i <= n; ++i){ cin >> a[i]; } vpi ans; if(s == 1){ int curmx = 0; for(int i = n; i >= 1; i--){ int id = 1; for(int j = 1; j <= i; ++j){ if((a[j] ^ curmx) > (a[id] ^ curmx)){ id = j; } } // cout << a[id] << endl; int minch = i; if(i == n){ minch = n - 1; } for(int j = 1; j <= minch; ++j){ ans.pb({j, j + 1}); a[j] = (a[j + 1] ^ a[j]); } for(int j = id + 1; j <= i; ++j){ ans.pb({j, j - 1}); a[j] = (a[j - 1] ^ a[j]); } for(int j = id - 1; j >= 2; j--){ ans.pb({j - 1, j}); a[j - 1] = (a[j] ^ a[j - 1]); } curmx = a[i]; } } else{ // int nn = for(int i = 19; i >= 0; --i){ bool f = false; for(int j = 1; j <= n - 1; ++j){ if(a[j] & (1 << i)){ f = true; if(a[j + 1] & (1 << i)){ ans.pb({j, j + 1}); a[j] = (a[j] ^ a[j + 1]); } else{ ans.pb({j + 1, j}); ans.pb({j, j + 1}); a[j + 1] = (a[j] ^ a[j + 1]); a[j] = (a[j + 1] ^ a[j]); } } } if(f){ n--; } } } cout << sz(ans) << "\n"; for(auto i : ans){ cout << i.ff << ' ' << i.ss << "\n"; } } void cases() { int t; cin >> t; while (t--) { solve(); } } int main() { // setIO("hps"); fastio(); precalc(); //setprecision(5); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...