Задание выполняется с использованием прилагаемых файлов
В текстовом файле записан набор натуральных чисел, не превышающих Гарантируется, что все числа различны. Необходимо определить, сколько в наборе таких пар чисел, что их сумма тоже присутствует в файле, и чему равна наибольшая из сумм таких пар.
Входные данные.
Первая строка входного файла содержит целое число — общее количество чисел в наборе. Каждая из следующих
строк содержит одно число. В ответе запишите два целых числа: сначала количество пар, затем наибольшую сумму.
Под парой подразумевается любые два различные элемента последовательности.
Пример входных данных:
В данном случае есть одна подходящая пара: и
(сумма
).
В ответе надо записать числа и
.
Решение через бин. поиск
def bin_search(a, x):
n = len(a)
left = -1
right = n
while right - left > 1:
middle = (left + right) // 2
if a[middle] >= x:
right = middle
else:
left = middle
if right != n and a[right] == x:
return True
else:
return False
f = open(’1.txt’)
n = int(f.readline())
a = []
counter = 0
max_summ = 0
for i in range(n):
a.append(int(f.readline()))
a = sorted(a)
for i in range(len(a)):
for j in range(i+1, len(a)):
if bin_search(a, a[i] + a[j]):
counter += 1
max_summ = max(max_summ, a[i] + a[j])
print(counter, max_summ)
Решение через поиск по множеству
f = open(’1.txt’)
n = int(f.readline())
a = []
counter = 0
max_summ = 0
for i in range(n):
a.append(int(f.readline()))
for i in range(len(a)):
for j in range(i+1, len(a)):
if (a[i] + a[j]) in a:
counter += 1
max_summ = max(max_summ, a[i] + a[j])
print(counter, max_summ)