题意:有A B两个组,各有n个人,每个人的分数为1---5,交换两组学生,使两组出现的数相等
统计每个数总共出现的次数,平分就是每个数在一组中应该出现的次数,分别遍历两组,统计每组多余的数的个数,取较小值
code:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n;
int a[110],b[110],num[6],num1[6],num2[6];
scanf("%d",&n);
memset(num,0,sizeof(num));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
num[a[i]]++;
num1[a[i]]++;
}sort(a,a+n);
for(int i=0;i<n;i++){
scanf("%d",&b[i]);
num[b[i]]++;
num2[b[i]]++;
}sort(a,a+n);
int sum1=0,sum2=0;
int f=1;
for(int i=0;i<n;){
if(num[a[i]]%2==1){
f=0; break;
}
if(num1[a[i]]-num[a[i]]/2>0){
sum1+=num1[a[i]]-num[a[i]]/2;i+=num1[a[i]];
}
else i++;
}
for(int i=0;i<n;){
if(num[b[i]]%2==1){
f=0; break;}
if(num2[b[i]]-num[b[i]]/2>0){
sum2+=num2[b[i]]-num[b[i]]/2;i+=num2[b[i]];
}else i++;
}
if(f==0)
printf("-1\n");
else printf("%d\n",min(sum1,sum2));
return 0;
}