OD华为机试 19
创始人
2024-01-29 06:38:33
0

分苹果

描述

A、B两个人把苹果分为两堆,A希望按照他的计算规则等分苹果,他的计算规则是按照二进制加法计算,并且不计算进位 12+5=9(1100 + 0101 = 9),B的计算规则是十进制加法,包括正常进位,B希望在满足A的情况下获取苹果重量最多。

输入苹果的数量和每个苹果重量,输出满足A的情况下B获取的苹果总重量。

如果无法满足A的要求,输出-1。

输入描述:
输入第一行是苹果数量:3
输入第二行是每个苹果重量:3 5 6

输出描述:
输出第一行是B获取的苹果总重量:11

测试用例
示例1:
输入

3
3 5 6

输出

11

示例2:
输入

8
7258 6579 2602 6716 3050 3564 5396 1773

输出

35165

法一

import java.util.*;public class Main {public static final int INVALID_NUM = -1;public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {int num = Integer.parseInt(sc.nextLine());List list = new ArrayList<>();for (int i = 0 ; i < num ; i++) {list.add(sc.nextInt());}//一个计数a,a要求相加之后对等,因为采用二进制而不进位,所以等同于异或int aWeight = 0;int bWeight = 0;int min = Integer.MAX_VALUE;for (int i : list) {aWeight ^= i;bWeight += i;min = Math.min(i, min);}if (aWeight == 0) {System.out.println(bWeight - min);} else {System.out.println(INVALID_NUM);}}}
}

算法实现

首先,如果能满足 A,那么所有苹果全部 “异或”操作后,必然是0 。
这是有一个比较巧妙的地方在于:

二进制加法不进位情况,恰恰就是异或的运行规则。

如例一所示:5(101) + 6 (110) = 3(011),
那么等式左边转为二进制后,一定是要和右边一模一样,每一位都一样,这样才能保证等分,因此我们可以先用异或,算出等式左边,然后此时如果再用一次异或来与等式右边比较,异或运行规则是,这一位相同,则结果是0,这一位不同,则结果是1。
其次,要想 B 最多,只需要将这堆苹果中,最小的一个给A即可。因为所有苹果异或的结果是0,所以任意拿出1个,分成另一堆, 那么剩下的就是B 想要的重量

相关内容

热门资讯

2016适合女性在乡镇开的十五... 2016适合女性开的十五种店:旅游景区的小驿店,酷热难耐的夏天人们都在周末到海岛渡假,洗海水浴的同时...
创业好项目,只适合女性的小本创... 如今生活中相信很多人都有一些爱拍照,爱留念的生活习惯,人们对智能设备的使用也已经非常的普及了,有一个...
在家小本创业好项目k 在家小本... 首页详情80后在家小本创业项目那些好时间:20在家小本创业好项目k21-01-80后在家小本创业项目...
适合在家小本创业项目 在家小本... 随着生活压力越来越大,并且想找到一份心仪的工作也是越来越为难,所以很多人都在想着是不是能够自己开始创...
小本创业的5个好项目 小本创业... 说起创业,我们应该从小本生意做起,我们看看有哪些最新适合小本创业的项目,让我们一起来看一看,希望每个...
2018适合创业者的小本经商项... 创业者必须具备精准定位消费群体的技能——如果你打算做外语培训班的话:从高级白领、大学博士到小学生甚至...
小本创业选择什么 10个小本创... 2、情侣礼品店此项目创办条件与普通精品店相似,但经营风格上有所不同,它的经营更注重一个"情"字,既要...
13个小本创业赚钱小本创业致富... 小本创业是目前比较受欢迎的创业方式,它的投资门槛低,吸引了不少普通大众的投资,但对于选项目却令人伤脑...
适合创业者的小本经商项目 适合... 做什么最容易赚钱?适合创业者的小本经商项目大多数的创业者在创业初期没做够的资金积储,因而,关于他们来...
2017小本创业致富项目有哪些... 能够帮助我们致富的创业项目,难道我们不应该即使把握吗?以下是学习啦小编给大家带来2017年小本创业致...