Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- f = sys.stdin
- line = f.readline().split()
- n = int(line[0])
- s = float(line[1])
- a = [float(x) for x in f.readline().split()]
- def generate_subsets_sums(numbers):
- subset_sums = {0}
- for number in numbers:
- new_sums = set()
- for existing_sum in subset_sums:
- new_sums.add(existing_sum + number)
- subset_sums.update(new_sums)
- return subset_sums
- def is_subset_sum_possible(numbers, target_sum, tolerance=1e-6):
- # Делим на 2 части
- mid = len(numbers) // 2
- left_half, right_half = numbers[:mid], numbers[mid:]
- # Генерируем все подмножества сумм для левой и правой частей
- left_sums = generate_subsets_sums(left_half)
- right_sums = generate_subsets_sums(right_half)
- # Проводим попарное сравнение элементов из левого и правого множеств
- for left_sum in left_sums:
- complement = target_sum - left_sum
- if any(abs(complement - right_sum) <= tolerance for right_sum in right_sums):
- return True
- return False
- print(is_subset_sum_possible(a, s))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement