华为OD-分积木/分苹果

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

 题目描述

哥哥弟弟分一堆积木每块积木重量不同。弟弟要求平分两组每组数量可以不同但总重量必须相等。
然而弟弟只会二进制并且加法不进位。例如三块积木 3,5,6 分成两组 [3] 和 [5,6]
弟弟认为 5二进制1001加上6二进制1010是0011
1001
1010
-------
0011
然后 3 的二进制也是 0011所以弟弟认为两组积木等重接受这种分配方案。哥哥实际能分到 5+6=11 块积木。
要求输出哥哥能拿的最大实际重量。如果给定的积木没法按弟弟视角分成重量相等的两组就输出‘NO’。

示例一

输入

5,6,3

输出

11

代码实现

# coding:utf-8
# 分积木/分苹果
# https://zhuanlan.zhihu.com/p/521401344?utm_id=0
# https://www.nowcoder.com/discuss/353159159166214144


class Solution:
    def allocateBlock(self, s):
        aweight = 0
        s = list(map(int, s))
        for i in range(len(s)):
            aweight = aweight ^ s[i]
        if aweight == 0:
            s.sort(reverse=True)
            s.pop()
            return sum(s)
        return -1


if __name__ == '__main__':
    s = list(input('input:').split(' '))
    solution = Solution()
    print(solution.allocateBlock(s))

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6