Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

# include<stdio.

h>
#include<stdlib.h>
# include<string.h>

int mycmpi(const void *a, const void *b) { return *(const int *)a - *(const int*)b;
}
# define sorti(x,n) qsort(x, n, sizeo f(x[0]), mycmpi);
typedef long long LL;

int as[128], bs[128];


struct { int i, j; } rs[128*128];
int main() {
int i, n, xi, k, t, j;
int bi, bj, xbi;
int tc; scanf("%d", &tc); while(tc--) {
scanf("%d", &n);
for (i=0; i<n; i++) scanf("%d", &as[i]);
for (i=0; i<n; i++) scanf("%d", &bs[i]);
k=0;
for (i=0; i<n-1; i++) {
xi=i;
for (j=i+1; j<n; j++) if (as[j]<as[xi]) xi=j;
if (xi==i) continue;
rs[k].i=i; rs[k].j=xi; k++;
t=as[i]; as[i]=as[xi];as[xi]=t;
t=bs[i]; bs[i]=bs[xi];bs[xi]=t;
}
for (i=0; i<n; ) {
j=i; while(j<n&&as[j]==as[i]) j++;
for (bi=i; bi<j-1; bi++) {
xbi=bi;
for (bj=bi+1; bj<j; bj++) if (bs[bj]<bs[xbi]) xbi=bj;
if (xbi==bi) continue;
rs[k].i=bi; rs[k].j=xbi; k++;
t=bs[bi]; bs[bi]=bs[xbi]; bs[xbi]=t;
}
i=j;
}
for (i=1; i<n; i++) if (bs[i]<bs[i-1]) break;
if (i<n) printf("-1\n");
else {
printf("%d\n", k);
for (i=0; i<k; i++) printf("%d %d\n", rs[i].i+1, rs[i].j+1);
}
}
return 0;
}

/**
* author: tourist
* created: 23.05.2022 18:37:07
**/
# include <bits/stdc++.h>

using namespace std;


# ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif

int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int tt;
cin >> tt;
while (tt--) {
int n;
cin >> n;
vector< int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
vector<int> b(n);
for (int i = 0; i < n; i++) {
cin >> b[i];
}
vector<pair<int, int>> p(n);
for (int i = 0; i < n; i++) {
p[i] = make_pair(a[i], b[i]);
}
sort(a.begin(), a.end());
sort(b.begin(), b.end());
vector<pair<int, int>> res;
bool fail = false;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
if (p[j] == make_pair(a [i], b[i])) {
swap(p[i], p[j]);
if (i != j) {
res.emplace_back(i, j);
}
break;
}
}
if (p[i] != make_pair(a[i], b[i])) {
fail = true;
break;
}
}
if (fail) {
cout << -1 << '\n';
} else {
cout << res.size() << '\n';
for (auto& p : res) {
cout << p.first + 1 << " " << p.second + 1 << "\n";
}
}
}
return 0;
}

You might also like