分糖果 二进制不进位相加
2011-05-17 13:54
169 查看
那天比赛时还有一题,分糖果。当时看了没神马头绪,就没看了。这是地址
http://218.75.208.59:8084/acmhome/problemdetail.do?&method=showdetail&id=1061
总提交:14 测试通过:11
描述[/b]
肖恩和帕特里克是兄弟,他们从他们的父母那里得到了很多糖果。每一块糖具有一个的正整数的价值,孩子们希望分他们得到的糖果。首先,肖恩将这些糖果分成两堆,并选择一堆给帕特里克。然后,帕特里克将尝试计算每堆的价值,其中每堆的价值是在那堆的糖果价值的总和,如果他觉得没有平等的价值,他将开始哭了起来。
不幸的是,帕特里克太小了,所以不能正确的计算。他只会二进制无进位的加法。比如说,他想算12(二进制为1100)加5(二进制为101),他会把最右边的两位加法算正确,但是第三位会忘记进位。(即0+0=0,0+1=1,1+0=1,1+1=0)
因此,帕特里克算12加5的结果为9。下面几个是帕特里克算的结果:
5 + 4 = 1
7 + 9 = 14
50 + 10 = 56
肖恩数学很好,他想得到价值总和更高的糖果并且不让他的弟弟哭。如果可能,他会分成两个非空的糖果袋,让帕特里克认为,双方都有相同的值的糖果。给你每一袋糖果每一块糖果的价值,我们想知道是否可能让帕特里克相信他们得到糖果价值的总量是相同的。如果可能计算出肖恩能得到的最大的价值。
输入[/b]
第一行输入T(1<T<1000)组测试数据。接下来是T行,每行包含以下数据,N C1 C2 .. Cn
(N(2 ≤ N ≤ 1000)代表从父母那里得到糖果的总数,C(1 ≤ Ci ≤ 10^6)代表每块糖果的价值)
输出[/b]
若不能输出NO,若能则输出肖恩得到的最大的价值。
样例输入[/b]
2
5 1 2 3 4 5
3 3 5 6
样例输出[/b]
NO
11
这题后来听波波讲,原来二进制不进位相加就是异或。
那这题就很简单了。只要把他们全部相加起来异或等于0就行了,因为如果除最小的那一个其他的数按二进制不进位相加起来等于最小的那个数相等的话,他们异或后等于0;所以只要总的加起来后异或等于0就代表着最小的那一个跟其他数“相加”后相等
http://218.75.208.59:8084/acmhome/problemdetail.do?&method=showdetail&id=1061
分糖果
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:14 测试通过:11
描述[/b]
肖恩和帕特里克是兄弟,他们从他们的父母那里得到了很多糖果。每一块糖具有一个的正整数的价值,孩子们希望分他们得到的糖果。首先,肖恩将这些糖果分成两堆,并选择一堆给帕特里克。然后,帕特里克将尝试计算每堆的价值,其中每堆的价值是在那堆的糖果价值的总和,如果他觉得没有平等的价值,他将开始哭了起来。
不幸的是,帕特里克太小了,所以不能正确的计算。他只会二进制无进位的加法。比如说,他想算12(二进制为1100)加5(二进制为101),他会把最右边的两位加法算正确,但是第三位会忘记进位。(即0+0=0,0+1=1,1+0=1,1+1=0)
因此,帕特里克算12加5的结果为9。下面几个是帕特里克算的结果:
5 + 4 = 1
7 + 9 = 14
50 + 10 = 56
肖恩数学很好,他想得到价值总和更高的糖果并且不让他的弟弟哭。如果可能,他会分成两个非空的糖果袋,让帕特里克认为,双方都有相同的值的糖果。给你每一袋糖果每一块糖果的价值,我们想知道是否可能让帕特里克相信他们得到糖果价值的总量是相同的。如果可能计算出肖恩能得到的最大的价值。
输入[/b]
第一行输入T(1<T<1000)组测试数据。接下来是T行,每行包含以下数据,N C1 C2 .. Cn
(N(2 ≤ N ≤ 1000)代表从父母那里得到糖果的总数,C(1 ≤ Ci ≤ 10^6)代表每块糖果的价值)
输出[/b]
若不能输出NO,若能则输出肖恩得到的最大的价值。
样例输入[/b]
2
5 1 2 3 4 5
3 3 5 6
样例输出[/b]
NO
11
这题后来听波波讲,原来二进制不进位相加就是异或。
那这题就很简单了。只要把他们全部相加起来异或等于0就行了,因为如果除最小的那一个其他的数按二进制不进位相加起来等于最小的那个数相等的话,他们异或后等于0;所以只要总的加起来后异或等于0就代表着最小的那一个跟其他数“相加”后相等
相关文章推荐
- 剑指-二进制相加进位
- PHP两个n位的二进制整数相加问题的解决
- Codeforces 309C Memory for Arrays 二进制模拟进位
- Add Binary 两个二进制字符串相加
- LeetCode 2. Add Two Numbers -- 两个链表按序从头到尾相加,记录进位
- 51 nod 1596搬货物 (二进制进位或优先队列)
- 每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加
- LeetCode 67. Add Binary (二进制相加)
- 二进制相加
- Leetcode:Add Binary 二进制相加
- Codeforces 309C Memory for Arrays 二进制模拟进位
- LeetCode-Add Two Numbers-链表数字相加-链表操作+加法进位
- 超长二进制相加,C语言实现
- 25与一个三位数相乘个位是0,与这个三位数相加有且只有1次进位,像这样的三位数总共有多少个?C#实现
- leetcode 67. Add Binary 二进制相加
- leetcode实现 “10001”+“1011” 返回二进制相加的结果
- 二进制字符串相加
- LeetCode 67 Add Binary(二进制相加)(*)
- HDU 4588 统计二进制加法进位次数
- 二进制相加