Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
right = 1e10#1 c 10-тью нулями. middle * middle + sqrt(middle) — (10^10/2) * (10^10)/2 ~ 9 степень к ней вы прибавляете корень из 19 степени ~10 степень. Получаем к 19 степени вы прибавляете 10 степень… Разница 9 степеней. Т.е. сложение работать не будет, хотя условие if middle * middle + sqrt(middle) >= c конечно сработает верно. Но при этом, если программа изменится, и вы напишите c = double(input()). Вас, например, попросят поточнее решение найти — уже ничего работать не будет.if middle * middle + sqrt(middle) >= c все выполнится в такой вот последовательности:if (((middle * middle) + sqrt(middle)) >= c), а не в такой скажем if (middle * middle + (sqrt(middle) >= c)))if middle * middle + sqrt(middle) >= cif sqrt(middle) + middle * middle >= c? что выполнится первым, вызов функции, изменение middle или умножение middle на middle, а потом вызов функции???print(int(round(left*10e6))/10e6) если left будет больше 2148, будет ерунда. Так как оно просто неверно преобразуется в int.решения могут не пройти любой из тестов просто из-за изменения в форматировании входного файлаПочему, если в условии ясно написано
Во второй строке задаются N чисел первого массива, отсортированного по неубыванию, а в третьей строке – K чисел второго массива.
Просто напомню что в Python для этого есть bisect, bisect_left и bisect_right
В результате, получим такое решение первой задачи:
import bisect
n, m = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
for v in b:
left = bisect.bisect_left(a, v)
if left >= n or a[left] != v:
print(0)
else:
print(left + 1, bisect.bisect_right(a, v))В целях обучения это конечно не актуально, но на соревновании поможет сэкономить несколько минут
Разбор задач. Бинпоиск_1