CSES - Putka Open 2020 – 3/5 - Results
Submission details
Task:Vaihdot
Sender:Lieska
Submission time:2020-10-16 18:56:41 +0300
Language:C++ (C++17)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED35
#2ACCEPTED65
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 2details
#2ACCEPTED0.03 s2details

Compiler report

input/code.cpp: In function 'void testi()':
input/code.cpp:64:33: warning: unused variable 'b' [-Wunused-variable]
                     int a=t[i], b=t[i+1], c=t[n];
                                 ^
input/code.cpp:80:25: warning: unused variable 'a' [-Wunused-variable]
                     int a=t[1], b=t[i], c=t[i+1];
                         ^

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void testi(){
int n;
cin >> n;
int t[n+2]={}, p[n+2]={}, k=0, ans[5*n+2][3];
for (int i=1; i<=n; ++i){
int a;
cin >> a;
t[i]=a;
p[a]=i;
}
if (n==1) {
cout << "0\n";
return;
}
if (n==2){
if (t[1]==1){
cout << "0\n";
return;
}
else{
cout << "-1\n";
return;
}
}
if (n==3){
if (t[2]!=2){
cout << "-1\n";
return;
}
else{
if (t[1]==1){
cout << "0\n";
return;
}
else{
cout << "1\n1 3\n";
return;
}
}
}
for (int i=1; i<n; ++i){
if (t[i]!=i){
if (p[i]!=i+1){
k++;
ans[k][1]=i;
ans[k][2]=p[i];
t[p[i]]=t[i];
p[t[i]]=p[i];
t[i]=i;
}
else{
if ((n-(i+1))>=2){
k++;
ans[k][1]=i+1;
ans[k][2]=n;
k++;
ans[k][1]=i;
ans[k][2]=n;
int a=t[i], b=t[i+1], c=t[n];
t[i+1]=c;
t[n]=a;
p[a]=n;
p[c]=i+1;
}
else if (i>=3){
k++;
ans[k][1]=i+1;
ans[k][2]=1;
k++;
ans[k][1]=i;
ans[k][2]=1;
k++;
ans[k][1]=1;
ans[k][2]=i+1;
int a=t[1], b=t[i], c=t[i+1];
t[i]=c;
t[i+1]=b;
p[b]=i+1;
}
else if (n==4){
if (t[2]==3){
k++;
ans[k][1]=1;
ans[k][2]=3;
k++;
ans[k][1]=2;
ans[k][2]=4;
k++;
ans[k][1]=1;
ans[k][2]=4;
k++;
ans[k][1]=1;
ans[k][2]=3;
k++;
ans[k][1]=2;
ans[k][2]=4;
t[2]=2;
t[3]=3;
p[3]=3;
}
else if (t[2]==4){
k++;
ans[k][1]=1;
ans[k][2]=3;
k++;
ans[k][1]=1;
ans[k][2]=4;
k++;
ans[k][1]=1;
ans[k][2]=3;
k++;
ans[k][1]=2;
ans[k][2]=4;
t[3]=3;
t[4]=4;
p[4]=4;
p[3]=3;
}
}
}
}
}
cout << k << "\n";
for (int i=1; i<=k; ++i){
cout << ans[i][1] << " " << ans[i][2] << "\n";
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
//�l� k�yt�, jos teht�v� on interaktiivinen!
int t;
cin >> t;
while (t--) testi();
}

Test details

Test 1

Group: 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

Group: 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
1 58
2 45
3 16
4 29
...
Truncated