Дана последовательность натуральных чисел. Необходимо выбрать из последовательности три числа так, чтобы их сумма делилась
В ответе запишите найденную сумму.
Входные данные.
Первая строка входного файла содержит целое
Вам даны два входных файла
Ответ:
Приведем решение на языке Python для файла A.
f = open('27-A.txt')
n = int(f.readline())
a = [int(s) for s in f]
summi = []
for i in range(n):
for j in range(i+1, n):
for k in range(j+1,n):
summa = a[i] + a[j] + a[k]
if summa % 102 == 0:
summi.append(summa)
print(max(summi))
Приведем решение на языке Python для файлов А и B.
f = open('27-B.txt')
n = int(f.readline())
a = [int(s) for s in f]
ost102 = [[-100000,-100000,-100000] for i in range(102)]
for i in a:
if i > min(ost102[i%102]):
ost102[i%102].append(i)
ost102[i%102].sort(reverse=True)
if len(ost102[i%102])>3:
del ost102[i%102][-1]
summa = -10**10
for x1 in range(102):
for x2 in range(102):
for x3 in range(102):
if (x1+x2+x3)%102 ==0:
if x1==x2==x3:
summa=max(sum(ost102[x1]),summa)
elif x1==x2:
summa=max(ost102[x3][0]+ost102[x1][0]+ost102[x1][1],summa)
elif x1==x3:
summa=max(ost102[x2][0]+ost102[x1][0]+ost102[x1][1],summa)
elif x2==x3:
summa=max(ost102[x1][0]+ost102[x2][0]+ost102[x2][1],summa)
else:
summa=max(ost102[x1][0]+ost102[x2][0]+ost102[x3][0],summa)
print(summa)
Ответ: 118728 & 299998014.
Приведем решение Сергея Фефелова на языке Python.
a = sorted([int(x) for x in open('27.txt')][1:] ,reverse=True)
r102 = [[-10**8]*3 for i in range(102)]
for x in a: r102[x%102].insert(-3,x)
smax = 0
for i in range(102):
for j in range(i,102):
k = (-i-j)%102
if k < j: continue
if i==k:
smax = max(sum(r102[i][:3]), smax)
elif i==j:
smax = max(r102[k][0]+r102[i][0]+r102[i][1], smax)
elif j==k:
smax = max(r102[i][0]+r102[j][0]+r102[j][1], smax)
else:
smax = max(r102[i][0]+r102[j][0]+r102[k][0], smax)
print(smax)
Приведём решение Юрия Красильникова на языке Python.
a = sorted([int(s) for s in open('27.txt')][1:],reverse=True)
p = [[] for _ in range(102)]
for x in a: p[x%102].append(x)
m = 0
for i in range(102):
for j in range(102):
ndx = [i,j,(-i-j)%102] # три индекса с суммой 0 по модулю 102
vect = [(x,ndx.count(x)) for x in set(ndx)] # пары (индекс, число его повторений)
if all([len(p[x[0]]) >= x[1] for x in vect]): # если все подсписки в p имеют нужную длину
m = max(m,sum(sum(p[x[0]][:x[1]]) for x in vect)) # вычисляем нужную сумму
print(m)

