传送门
题目:
Example
input
3
2
3 1
4 2
3
5 3 1
2 4 6
5
7 5 9 1 3
2 4 6 10 8
output
0
2
3
大致题意:
思路:利用奇数偶数的区别,将两数组数据与对应位置记录下来并对数组里的数进行排序,接下来从小开始遍历求最小的交换方法
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int a[N],b[N];
map<int,int>mpa,mpb;
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t;cin>>t;
while(t--){
mpa.clear();mpb.clear();
int n;cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
mpa[a[i]]=i;
}
for(int i=0;i<n;i++){
cin>>b[i];mpb[b[i]]=i;
}
sort(a,a+n);sort(b,b+n);
int minn=N,ans=n*2;
for(int i=0;i<n;i++){
minn=min(minn,mpa[a[i]]);//记录小于当前偶数的奇数最少交换位置(次数)
ans=min(ans,mpb[b[i]]+minn);//当前偶数交换次数+符合要求的奇数最小交换次数
}
cout<<ans<<endl;
}
return 0;
}