#52839: e04 python嘗試了好久還是過不了(已放棄)


bob981115@gmail.com (Bob)

學校 : 國立武陵高級中學
編號 : 312562
來源 : [101.12.128.235]
最後登入時間 :
2025-08-31 18:27:16

e04 python嘗試了好久還是過不了:

#   a981. 求和問題
import sys
data = list(map(int, sys.stdin.read().split()))
sys.setrecursionlimit(10000000)
n = data.pop(0)
m = data.pop(0)
data.sort(reverse = False)

middle = len(data) // 2
left = data[:middle]
right = data[middle:]

def subset(arr):
    result = []
    length = len(arr)

    def dfs(idx, total, current_list):
        if idx == length:
            result.append((current_list, total))
            return
        else:
            dfs(idx+1, total+arr[idx], current_list + [arr[idx]])
            dfs(idx+1, total, current_list)

    dfs(0, 0, [])
    return result

left = subset(left)
right = subset(right)

right_map = {}
for arr, sums in right:
    if sums not in right_map:
        right_map[sums] = []
    right_map[sums].append(arr)

result = []
for arr_left, sums in left:
    remain = m - sums
    if remain in right_map:
        for arr_right in right_map[remain]:
            ans = arr_left + arr_right
            result.append(ans)

result.sort()
if result:
    for nums in result:
        print(*nums)
else:
    print(-1)