A. Pupils Redistribution time limit per test1 second memory limit per
test256 megabytes inputstandard input outputstandard output In Berland
each high school student is characterized by academic performance —
integer value between 1 and 5.
In high school 0xFF there are two groups of pupils: the group A and the group B. Each group consists of exactly n students. An academic performance of each student is known — integer value between 1 and 5.
The school director wants to redistribute students between groups so that each of the two groups has the same number of students whose academic performance is equal to 1, the same number of students whose academic performance is 2 and so on. In other words, the purpose of the school director is to change the composition of groups, so that for each value of academic performance the numbers of students in both groups are equal.
To achieve this, there is a plan to produce a series of exchanges of students between groups. During the single exchange the director selects one student from the class A and one student of class B. After that, they both change their groups.
Print the least number of exchanges, in order to achieve the desired equal numbers of students for each academic performance.
Input
The first line of the input contains integer number n (1 ≤ n ≤ 100) — number of students in both groups.
The second line contains sequence of integer numbers a1, a2, …, an (1 ≤ ai ≤ 5), where ai is academic performance of the i-th student of the group A.
The third line contains sequence of integer numbers b1, b2, …, bn (1 ≤ bi ≤ 5), where bi is academic performance of the i-th student of the group B.
Output
Print the required minimum number of exchanges or -1, if the desired distribution of students can not be obtained.
Examples
input
4
5 4 4 4
5 5 4 5
output
1
input
6
1 1 1 1 1 1
5 5 5 5 5 5
output
3
input
1
5
3
output
-1
input
9
3 2 5 5 2 3 3 3 2
4 1 4 1 1 2 4 4 1
output
4
#include<stdio.h>
int a[6],b[6],c[6];
int abs(int x){return x<0?-x:x;}
int main()
{
int n;
int g;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&g);
a[g]++;
}
for(int i=0;i<n;i++){
scanf("%d",&g);
b[g]++;
}
bool flag=true;
for(int i=1;i<=5;i++){
c[i]=a[i]+b[i];
if(c[i]%2!=0){
flag=false;
break;
}
c[i]/=2;
}
if(flag){
int ans=0;
for(int i=1;i<=5;i++){
ans+=abs(c[i]-a[i])+abs(c[i]-b[i]);
}
ans/=4;
printf("%d\n",ans);
}else puts("-1");
return 0;
}
本文介绍了一种算法,用于解决两个班级的学生学术表现均衡化问题。通过一系列学生交换操作,使得两个班级中各学术表现等级的学生人数相等。文章详细解释了算法的工作原理,并提供了一个实现该算法的C语言程序示例。

被折叠的 条评论
为什么被折叠?



