分苹果

题目描述

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()