Codeforces Round #402 (Div. 2) A
Description
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.
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.
Print the required minimum number of exchanges or -1, if the desired distribution of students can not be obtained.
4
5 4 4 4
5 5 4 5
1
6
1 1 1 1 1 1
5 5 5 5 5 5
3
1
5
3
-1
9
3 2 5 5 2 3 3 3 2
4 1 4 1 1 2 4 4 1
4
题意:交换两个组的学生,使得两个组的分数相同。
解法:自然需要符合一个分数出现次数为偶数,如果出现奇数不能平分。
然后计算两个组出现相同分数之差除以2,求得和/2就是结果
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int maxn=;
int a[],b[];
map<int,int>p,q;
int main()
{
int n;
cin>>n;
for(int i=;i<=n;i++)
{
cin>>a[i];
q[a[i]]++;
}
for(int i=;i<=n;i++)
{
cin>>b[i];
p[b[i]]++;
}
int ans=;
for(int i=;i<=;i++)
{
if((p[i]+q[i])%)
{
cout<<"-1";
return ;
}
else
{
ans+=abs(p[i]-q[i])/;
}
}
cout<<ans/<<endl;
return ;
}
最新文章
- signalr遇到的问题汇总
- mvc webapi 返回字符串自动加双引号
- golang 简易聊天
- (转)用JQuery实现Fix表头表格
- [ActionScript 3.0] AS3动画类Tweener中滤镜的运用
- tomcat升级问题
- 七日筑基——C#第一天(上)
- MongoDB--数据库与Collection注意事项
- 电脑本机ping通Linux虚拟机的方法
- HTML5——localStorage
- java单例模式学习笔记
- Java高并发 -- 线程池
- linux audit审计(2)--audit启动
- npm install Install error: Unexpected token <; in JSON at position 35问题解决
- AngelToken:区块链技术的突破
- 2017 秦皇岛CCPC Balloon Robot (ZOJ 3981)
- CentOS7下gitlab的搭建
- Python Django框架笔记(二):创建应用和django 管理
- How To Pronounce 3-Syllable Phrases
- Linux mdev 热拔插配置