Извините, но я вашу программу сломала
Программа с сайта:
with open("27-184b.txt") as F:
N, K = map(int, F.readline().split())
data = [int(x) for x in F]
sMax = float('-inf')
maxK = float('-inf')
max1 = max2 = max3 = float('-inf')
for i in range(N):
if i >= K:
maxK = max(data[i - K], maxK)
s = maxK + data[ i]
s += max1 + max2 if maxK != max1 else max2 + max3
sMax = max(s, sMax)
if data > max1:
max1, max2, max3 = data[ i], max1, max3
elif data[ i] > max2:
max2, max3 = data[ i], max2
elif data[ i] > max3:
max3 = data[ i]
print(sMax)
Моя версия:
F = open("27-184b.txt")
N, K = map(int, F.readline().split())
sMax = -10 ** 8
maxK = -10 ** 8
max1 = max2 = max3 = -10 ** 8
queue = []
for i in range(K):
x = int(F.readline())
queue.append(x)
if x > max1:
max1, max2, max3 = x, max1, max2
elif x > max2:
max2, max3 = x, max2
elif x > max3:
max3 = x
for i in range(K, N):
x = int(F.readline())
y = queue[i % K]
queue[i % K] = x
maxK = max(y, maxK)
s = maxK + x
if maxK == max1:
s += max2 + max3
elif maxK == max2:
s += max1 + max3
else:
s += max1 + max2
sMax = max(s, sMax)
if x > max1:
max1, max2, max3 = x, max1, max2
elif x > max2:
max2, max3 = x, max2
elif x > max3:
max3 = x
print(sMax)
Все три программы и на файле А и на файле В выдают одинаковые ответы.
Если взять входные данные такие:
8 7
50
1
1
100
20
1
40
1
моя и ваша программа дают ответ 191 (50+100+40+1), программа с сайта дает ответ 201(50+100+50+1)
Об этом и был пост выше.
А вот на файле:
11 7
20
1
1
50
40
1
100
1
90
1
150
программа с сайта и моя выдают ответ 390(150+50+100+90), а ваша программа упала с ошибкой "max() arg is an empty sequence"
Если последнее число в файле - 150 заменить на что-то маленькое, например 13 ваша программа выдает ответ 253, видимо, 13+50+90+100.
Но есть сумма больше 90+20+100+50 = 260, этот ответ дают и моя программа и программа с сайта.
Волшебная строчка
цитата: |
maxi=max(maxi,max(c[0] for c in s[3:] if abs(c[1]-min(c[1] for c in s[:3]))>=k)+sum(c[0] for c in s[:3])) |
|
для меня осталась почти загадкой
Компактные решения, конечно, прикольно смотрятся, но я думаю, что решение должно быть сначало понятно, а потом компактно.