题解 | #数组分组#

数组分组

https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86

# 其实递归的想法很单纯,但是就是会超时,优化了好久最后发现一开始做所有输入数字之和的奇偶判断可以省很多时间
# 本来想看题解,还是强行自己优化出来了,6
import sys

ipt = []

for line in sys.stdin:
    nums = list(map(int, line.strip().split()))

    ipt.append(nums)

nums = ipt[1]

three, five, other = [], [], []

# print(nums, three, five, other)

for num in nums:
    if num % 3 == 0:
        three.append(num)
    elif num % 5 == 0:
        five.append(num)
    else:
        other.append(num)

three, five = sum(three), sum(five)

other.sort() if other else None

# print(nums, three, five, other)

def judge(three, five, other):
    other_set = list(set(other))
    # print(three, five, other_set)
    if other:
        if three == five and sum(other) == 0:
            return True
        elif three == five and sum(other) != 0:
            return False
        elif three != five and (three + sum(other) == five or five + sum(other) == three):
            return True
        for i in range(len(other_set)):
            # print(i, other[i], three, five)
            another = other[:]
            c = another.pop(i)
            if i > 0 and other[i-1] == c:
                continue
            res = judge(three+c, five, another) or judge(three, five+c, another)
            if res:
                return True
        
    else:
        if three == five:
            return True
        else:
            return False

if (three + five + sum(other)) % 2 != 0:
    res = False
else:
    res = judge(three, five, other)

# print(res, 1)

if res:
    print('true')
else:
    print('false')

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务