题解 | #数组分组#

数组分组

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

import sys
import math

def solu_dfs(l1, l2, data, cha):
    if len(data) == 0 :
        # print(l1, l2)
        if  math.fabs(  sum(l1) - sum(l2) ) == cha :
            return True
        else :
            return False
    return solu_dfs(l1 + [data[0]], l2, data[1:], cha) or solu_dfs(l1, l2 + [data[0]], data[1:], cha)

def solu2(l1, l2, data, target):
    if sum(l1) == target or sum(l2) == target: # 
        # print("提前结束 ?", len(data), l1, l2)
        return True
    if len(data) == 0:
        if sum(l1) == target or sum(l2) == target:
            return True
        else :
            return False
    return solu2(l1 + [data[0]], l2, data[1:], cha) or solu_dfs(l1, l2 + [data[0]], data[1:], cha)

for line in sys.stdin:
    a = int(line.strip())
    data = list(map(int, input().strip().split()))
    d1, d2 , d3= [], [], [] # d1 -- 5
    for i in data:
        if i % 5 == 0:
            d1.append(i)
        elif i % 3 ==0:
            d2.append(i)
        else :
            d3.append(i)

    #本差值是相对值, 应该可以算出来,但是 理解上稍稍差一点意思, 计算上也麻烦, 不能提前结束
    cha =  math.fabs( sum(d1) - sum(d2)) 

    # 本差值,数组和目标的差值,是绝对值,可以提前结束
    target = (sum(data)/2 - sum(d1)) if sum(d1) <= sum(d2) else (sum(data)/2 - sum(d2))      

    # if solu_dfs([],[], d3, cha):
    #     print("true")
    # else :
    #     print('false')

    if solu2([],[], d3, target):
        print("true")
    else :
        print('false')

全部评论

相关推荐

06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 11:16
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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