您的位置:首页 > 其它

【codeforces】Round #402 Div.2 A

2017-02-27 11:01 316 查看


题意:有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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: