分苹果
题目描述
A, B两个人把苹果分为两堆, A希望按照他的计算规则等分苹果, 他的计算规则是按照二进制加法计算,
并且不计算进位 12+5=9
(1100 + 0101 = 9).
B的计算规则是十进制加法, 包括正常进位, B希望在满足A的情况下获取苹果重量最多.
输入苹果的数量和每个苹果重量, 输出满足A的情况下B获取的苹果总重量.
如果无法满足A的要求, 输出 -1
.
数据范围:
- 1 <= 总苹果数量 <= 20000
- 1 <= 每个苹果重量 <= 10000
输入描述
- 输入第一行是苹果数量, 3
- 输入第二行是每个苹果重量, 3 5 6
输出描述
输出第一行是B获取的苹果总重量 11.
示例1
输入:
3
3 5 6
输出:
11
示例2
输入:
8
7258 6579 2602 6716 3050 3564 5396 1773
输出:
35165
题解
Python
def main():
# 读取输入
# 计算所有苹果的异或和, 如果不为0, 则没有办法按照A的方法来分, 直接返回
# 计算所有苹果的重量之和
# 找到最小重量的苹果并把它分给A, 剩下的都分给B
num_apples = int(input())
apple_weights = list(map(int, input().split()))
assert len(apple_weights) == num_apples
assert num_apples <= 20000
MAX_WEIGHT = 10000
xor_sum = 0
total_weight = 0
min_weight = MAX_WEIGHT
for weight in apple_weights:
xor_sum = xor_sum ^ weight
total_weight += weight
min_weight = min(min_weight, weight)
if xor_sum != 0:
print(-1)
else:
# 将 min_weight 那个苹果分给A, 剩下的都给B
remains = total_weight - min_weight
print(remains)
if __name__ == "__main__":
main()