ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Pupils Redistribution

2020-12-26 22:34:14  阅读:204  来源: 互联网

标签:aa Pupils bb int memset 个数 ++ Redistribution


题目链接:Pupils Redistribution

 

题目大意:

给两个数组A和B,元素均为1到5(包含端点),可以选择A中一个数和B中一个数进行交换,问最少交换多少次可以使得两个数组中1的个数相同,2的个数相同,3的个数相同,4的个数相同,5的个数相同。

 

思路:

记录两个数组中每个数出现的次数,假设分别为a,b,如果某个数出现的次数和为奇数,则输出-1(原因显然),然后累加每个数个数之差绝对值的一半,假设为s,最后输出s/2(因为有重复,调整一个数时,他可能已经被上一个数调整过了)

 

参考代码:

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int main() {
 6     int n,a[110],b[110],f[6],aa[6],bb[6];
 7     memset(f,0,sizeof(f));
 8     memset(aa,0,sizeof(aa));
 9     memset(bb,0,sizeof(bb));
10     cin >> n;
11     for(int i = 1; i <= n; i++) {
12         cin >> a[i];
13         f[a[i]]++;
14         aa[a[i]]++;
15     }
16     for(int i = 1; i <= n; i++) {
17         cin >> b[i];
18         f[b[i]]++;
19         bb[b[i]]++;
20     }
21     for(int i = 1; i <= 5; i++) {
22         if(f[i] & 1) {
23             cout << -1 << endl;
24             return 0;
25         }
26     }
27     int s = 0;
28     for(int i = 1; i <= 5; i++) {
29         s += abs(aa[i]-bb[i])/2;
30     }
31     cout << s/2 << endl;
32     return 0;
33 }
View Code

 

标签:aa,Pupils,bb,int,memset,个数,++,Redistribution
来源: https://www.cnblogs.com/gblong10/p/14194721.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有