啊。题意是 有两个元素数量相等的数组,相互交换元素,使两个数组的元素都相同,求其最小的步数。如果无法完成则返回-1。
其实开一个数组就可以,注意考虑a[x]–后小于0的情况。还有每次交换都可以调整两个元素,结果要/2.
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int a[6]={0};
int main()
{
int x,n;
while(~scanf("%d",&n)){
for(int i=0;i<n;i++){
scanf("%d",&x);
a[x]++;
}
for(int i=0;i<n;i++){
scanf("%d",&x);
a[x]--;
}
int ans=0;
for(int i=1;i<=5;i++){
if(abs(a[i])%2){
printf("-1\n");
return 0;
}
ans+=abs(a[i])/2;
}
printf("%d\n",ans/2);
}
return 0;
}