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.

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

题意:交换两个组的学生,使得两个组的分数相同。

解法:自然需要符合一个分数出现次数为偶数,如果出现奇数不能平分。

然后计算两个组出现相同分数之差除以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 ;
}

最新文章

  1. signalr遇到的问题汇总
  2. mvc webapi 返回字符串自动加双引号
  3. golang 简易聊天
  4. (转)用JQuery实现Fix表头表格
  5. [ActionScript 3.0] AS3动画类Tweener中滤镜的运用
  6. tomcat升级问题
  7. 七日筑基——C#第一天(上)
  8. MongoDB--数据库与Collection注意事项
  9. 电脑本机ping通Linux虚拟机的方法
  10. HTML5——localStorage
  11. java单例模式学习笔记
  12. Java高并发 -- 线程池
  13. linux audit审计(2)--audit启动
  14. npm install Install error: Unexpected token &lt; in JSON at position 35问题解决
  15. AngelToken:区块链技术的突破
  16. 2017 秦皇岛CCPC Balloon Robot (ZOJ 3981)
  17. CentOS7下gitlab的搭建
  18. Python Django框架笔记(二):创建应用和django 管理
  19. How To Pronounce 3-Syllable Phrases
  20. Linux mdev 热拔插配置

热门文章

  1. Python 的枚举类型
  2. LoadRunner打开WebTours只显示头部解决办法
  3. 2018值得选用的五个Linux服务器发行版
  4. HDU2203(KMP入门题)
  5. 利用Dockerfile文件创建带有sshd服务的centos镜像
  6. 使用 Git 命令去管理项目的版本控制(二)
  7. vs未能正确加载XX包的解决方法
  8. sql语句之数据类型
  9. python类的特殊成员和方法
  10. c/c++面试12-18------关与sizeof那些事儿