Авторское решение:
with open('26-117.txt') as F:
K, N = map( int, F.readline().split() )
data = [ tuple(map(int, F.readline().split())) for i in range(N) ]
data.sort()
freeTime = [0]*K # время готовности
maxWait = 0
lastRoom = -1
for tStart, tEnd in data:
k = 0
for i in range(1, K):
if freeTime[ i] <= freeTime[k]: k = i
maxWait = max( freeTime[k] - tStart, maxWait )
if freeTime[k] <= tEnd and freeTime[k] < 7*24*60:
print( tStart, tEnd, '->', k+1, max(0,freeTime[k] - tStart) )
freeTime[k] = max( freeTime[k], tEnd ) + 31
lastRoom = k + 1
print( maxWait, lastRoom )
Но тогда максимальное время ожидания обновляется без проверки того, что номер может освободится уже после того, как клиент уедет. Но тогда его время ожидания длится даже тогда, когда клиент уже уехал. Если же считать временем ожидания только время, по окончании которого клиент обязательно заезжает в номер, то ответ поменяется, максимальное время ожидания окажется равным 79:
with open('26-117.txt') as F:
K, N = map( int, F.readline().split() )
data = [ tuple(map(int, F.readline().split())) for i in range(N) ]
data.sort()
freeTime = [0]*K # время готовности
maxWait = 0
lastRoom = -1
for tStart, tEnd in data:
k = 0
for i in range(1, K):
if freeTime[ i] <= freeTime[k]: k = i
if freeTime[k] <= tEnd and freeTime[k] < 7*24*60:
print( tStart, tEnd, '->', k+1, max(0,freeTime[k] - tStart) )
maxWait = max( freeTime[k] - tStart, maxWait )
freeTime[k] = max( freeTime[k], tEnd ) + 31
lastRoom = k + 1
print( maxWait, lastRoom )
Что есть правильно? И где ошибка? Помогите!