Яндекс.Контест - Wrong-Answer на последнем тесте
Всем привет! Мне нужно решить это задание на Яндекс.Контесте. Написал код, который решает это задание. Однако он все равно не проходит последний тест. Все предыдущие тесты программа прошла отлично. В чем причина того, что последний тест программа не проходит?
Код моего решения на Python задачи такой такой:
def setIntWithProverka(e, userInput):
if 1 <= int(e) and int(e) <= 10**9:
return int(e)
else:
if userInput:
print(-1)
else:
open("output.txt", "w").write(str(-1))
quit()
userInput = True
try:
N = int(input())
V = list(map(lambda e, userInput=userInput: setIntWithProverka(e, userInput), input().split(" ")))
except ValueError:
userInput = False
f = open("input.txt")
content = f.readlines()
N = int(content[0])
V = list(map(lambda e, userInput=userInput: setIntWithProverka(e, userInput), content[1].split(" ")))
f.close()
if not (len(V) == N or not (1 <= N and N <= 100000)):
if userInput:
print(-1)
else:
open("output.txt", "w").write(str(-1))
quit()
mx_v = max(V)
k = 0
counter = 0
while len(set(V)) != 1:
for i in range(len(V)):
if V[i] != mx_v:
k += 1
for k_value in range(k):
V[k_value] += 1
counter += 1
k = 0
if counter >= 1000:
if userInput:
print(-1)
else:
open("output.txt", "w").write(str(-1))
quit()
if userInput:
print(counter)
else:
open("output.txt", "w").write(str(counter))
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Идём в цикле по элементам.
Если значение изменилось вниз - аллес капут.
Если значение изменилось вверх на d, добавляем к счётчику операций d
cnt = 0
for i in range(1, len(V)):
d = V[i] - V[i-1]
if d < 0:
cnt = -1
break
elif d > 0:
cnt += d
Однако можно заметить, что сумма положительных разностей массива, сортированного по неубыванию - это просто разница последнего и первого элемента, так что можно просто проверить упорядоченность и взять эту самую разницу
cnt = V[-1]-V[0]
for i in range(1, len(V)):
if V[i] < V[i-1]:
cnt = -1
break
print(cnt)