Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача по программированию. Python. Блины. Проходит 3 теста . В чём проблема?

Фёдор Мастер (1575), закрыт 5 лет назад
Задача: N гостей сидят за столом, и перед каждым стоит тарелка с блинами. На тарелке i-го гостя лежит ai блинов. Каждый гость съедает один блин за одну минуту, таким образом, время, когда закончит есть блины последний человек, равно наибольшему значению из ai.

Неожиданно к ним присоединился ещё один человек, и теперь все присутствующие могут переложить часть своих блинов (в том числе могут переложить все свои блины, а могут не перекладывать ни одного блина) вновь пришедшему человеку. Перекладывание блинов происходит одновременно и моментально.

Гости хотят переложить блины таким образом, чтобы после перекладывания они съели все блины за минимальное время (которое равно наибольшему числу блинов на тарелках у гостей, включая нового гостя). Определите, за какое наименьшее время гости смогут съесть свои блины после перекладывания.

Программа получает на вход натуральное число N, не превосходящее 100.000, – первоначальное количество гостей. Следующие N строк содержат натуральные числа ai – количество блинов на тарелке i-го человека. Значения ai даны в порядке неубывания, то есть ai ai+1. Сумма значений всех ai не превосходит 2109.
Дополнен 5 лет назад
n = int(input())
a = []
w = 0
for i in range(n):
a.append(int(input()))
for q in range(len(a)):
z = a[n - 1]
if w == z:
break
for j in range(n):
if a[n - j - 1] == z:
if w < z:
w += 1
a[n - j - 1] -= 1
elif a[n - j - 1] < z:
z -= 1
print(w)
Лучший ответ
Анна Полукеева Профи (877) 5 лет назад
почему ответ не может равняться наибольшему из а [i]?
Aleks NotsПросветленный (22646) 5 лет назад
"почему ответ не может равняться наибольшему из а [i]"

А если у наибольшего блинов в два раза (и более) больше чем у остальных, то он может переложить половину, после чего время уменьшится в два раза.

По-моему, время нельзя уменьшить только в случае, если владельцев одинакового максимального количества больше, чем это количество.
Анна Полукеева Профи (877) даже если у одного человека за столом наибольшее количество блинов, то ответ на вопрос задания - его время, не так ли?
Остальные ответы
Aleks Nots Просветленный (22646) 5 лет назад
Я не уверен в правильности ответа, но, насколько я понял, то суть так:
#a = [0,3,5,5,11,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18]
a = [0,3,5,5,12] # введены 3 5 5 12, а первый ноль добавлен к ним. Это вновь пришедший. В него будут скидываться с максимальных значений. Пока не станет максимальным.
while a[0] < max(a):
~~~~a[a.index(max(a))] -= 1
~~~~a[0] += 1

print(a)
print(a[0])
Алексей Хвостовский Мудрец (18112) 5 лет назад
То ли я что-то не понял.. то ли че-то не то..
Проверки вводимых значений нет только..
https://onlinegdb.com/rkEUNNDuE
Алексей ХвостовскийМудрец (18112) 5 лет назад
Оу.. уже решено было выше..
Похожие вопросы