Я написал решение для this competitive programming problem. Он прошел все тестовые примеры, за исключением того, что он был отключен одним из последних случаев, и я не могу понять, почему. Проблема может быть сформулирована следующим образом: учитывая, сколько копеек каждый человек в группе имеет, сколько денег нужно переменить руками, чтобы все в группе были в пределах одной копейки друг от друга в богатстве?Невозможная ошибка в программе, которая выравнивает богатство в группе (UVA 10137, «The Trip»)
Моя программа проста. Я изменил его, чтобы просто работать на массиве, сколько грошей у каждого есть:
def transfer(A):
A.sort(key = lambda x:-x)
extra = sum(A) % len(A)
average = sum(A) // len(A)
high = sum([abs(x - (average+1)) for x in A[:extra]])
low = sum([abs(x - average) for x in A[extra:]])
return (high+low)/2
тест так, что он не на следующий:
print(transfer([613, 944, 7845, 8908, 12312, 22378, 27877, 54757, 55476, 90707, 91289, 178189]))
Мой код говорит ответ 240710
, в то время как «правильный» ответ - 240709
. Где моя ошибка?
Я склонен думать, что у вас на самом деле была ошибка где-то в долларах -> пенни или пенни -> доллар конверсия из-за округления с плавающей запятой. – user2357112
Нет, тестовый пример с точки зрения гроши, а неправильный ответ также относится к пенни. Спасибо, хотя :) –
Я думаю, что нет ошибки, и ваш код правильный – samgak