#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |