| Task: | Vaihdot |
| Sender: | PallomerenPiikki |
| Submission time: | 2020-10-18 12:03:31 +0300 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 100 |
| subtask | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 35 |
| #2 | ACCEPTED | 65 |
| test | verdict | time | subtask | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.01 s | 1, 2 | details |
| #2 | ACCEPTED | 0.03 s | 2 | details |
Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define x first
#define y second
bool solve(int n, vector<int>& arr, vector<pii>& ans) {
vector<int> pos(n);
for (int i=0; i<n; i++)
pos[arr[i]] = i;
auto mv = [&](int i, int j) {
if (abs(i-j)<=1 || arr[i]==i) return;
swap(arr[i], arr[j]);
swap(pos[arr[i]], pos[arr[j]]);
ans.emplace_back(i, j);
};
for (int j=0; j<n; j++) {
int x = (j+1)%n;
mv(pos[x], x);
mv(pos[x], 0);
mv(pos[x], x);
mv(pos[x], n-1);
mv(pos[x], x);
if (arr[x] != x)
return false;
}
return true;
}
signed main() {
ios::sync_with_stdio(0);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> arr(n);
for (int i=0; i<n; i++) {
cin >> arr[i];
arr[i]--;
}
vector<pii> ans;
if (!solve(n, arr, ans))
cout << "-1\n";
else {
cout << ans.size() << '\n';
for (auto p : ans)
cout << p.x+1 << ' ' << p.y+1 << '\n';
}
}
}
Test details
Test 1
Subtask: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 1000 1 1 2 1 2 ... |
| correct output |
|---|
| 0 0 -1 0 -1 ... |
| user output |
|---|
| 0 0 -1 0 -1 ... Truncated |
Test 2
Subtask: 2
Verdict: ACCEPTED
| input |
|---|
| 1000 79 49 42 77 41 37 61 46 55 7 72 4... |
| correct output |
|---|
| 81 67 79 70 78 3 77 60 76 ... |
| user output |
|---|
| 79 45 2 16 3 29 4 79 5 ... Truncated |
