1 Ответ
1. В биатлоне спортсмен бежит несколько одинаковых основных кругов, между которыми расположены огневые рубежи (то есть основных кругов всегда на 1 больше, чем огневых рубежей). За каждый промах при стрельбе он должен пробежать штрафной круг фиксированной длины p. Известно количество огневых рубежей r, количество промахов k и общая длина дистанции s (сумма всех основных кругов и всех штрафных кругов) для одного из спортсменов. Найдите длину основного круга.
Формат входных данных
Четыре строки входных данных содержат четыре целых числа: r (1 ⩽ r ⩽ 103), k (0 ⩽ k ⩽ 105), p (1 ⩽ p ⩽ 105) и s (1 ⩽ s ⩽ 109). Гарантируется, что длина основного круга при указанных параметрах — натуральное число.
Формат выходных данных
Выведите одно натуральное число — ответ на вопрос задачи.
Ответ:
import sys
r, k, p, s = map(int, sys.stdin.read().split())
print((s — k * p) // (r + 1))
2. Капитан прогулочного катера «Камчатка» отлично знает, что горбатого кита лучше всего искать в прямоугольнике с координатами противоположных углов (x1, y1)–(x2, y2). Однако киты не всегда желают показываться на поверхности, потому он на всякий случай ещё знает, что можно попробовать полюбоваться косатками в прямоугольнике с координатами противоположных углов (x3, y3)–(x4, y4) (оба прямоугольника имеют стороны, параллельные координатным осям). Очевидно, что капитану лучше всего курсировать в пересечении этих двух прямоугольников для того, чтобы клиенты с наибольшей вероятностью увидели какое-то из морских существ. Требуется найти площадь этого пересечения.
Формат входных данных
На вход подаются восемь чисел — координаты углов двух прямоугольников. В первых двух строках задаются числа x1 и y1, в следующих двух строках задаются числа x2 и y2, далее в двух следующих строках идут x3 и y3, и в последних двух строках — x4 и y4. Эти числа задают координаты противоположных углов двух прямоугольников со сторонами, параллельными координатным осям. Первые четыре числа задают две противоположные по диагонали вершины первого прямоугольника, следующие четыре числа — две противоположные по диагонали вершины второго прямоугольника. x1 ≠ x2, y1 ≠ y2, x3 ≠ x4, y3 ≠ y4. Все числа целые и принимают значения в пределах от 0 до 100.
Ответ:
import sys
x1, y1, x2, y2, x3, y3, x4, y4 = map(int, sys.stdin.read().split())
w = min(max(x1, x2), max(x3, x4)) — max(min(x1, x2), min(x3, x4))
h = min(max(y1, y2), max(y3, y4)) — max(min(y1, y2), min(y3, y4))
print(max(w, 0) * max(h, 0))
3. Маркетологи знают, что в супермаркетах покупатель сначала ведёт себя рационально, а в конце срывается на спонтанную покупку у кассы. Вы анализируете чек из трёх разных товаров, купленных ровно в том порядке, в котором они написаны в чеке. Всего в магазине n товаров, каждый i-й товар имеет цену ki рублей. Покупатель выбирает товар по цепочке:
Первый товар — любой;
Второй товар стоит примерно столько же, сколько первый; разница их цен не превышает t;
Третий товар резко отличается по цене от первого; разница их цен строго больше t.
Сколько существует способов собрать такой чек из товаров, имеющихся в магазине?
Формат входных данных
В первой строке вводится натуральное число n — количество товаров. Во второй строке вводится натуральное число t — разность цен (3 ⩽ n ⩽ 105, 0 ⩽ t ⩽ 109). В следующих строках вводятся натуральные числа ki, i-е по счёту число равно стоимости i-го товара (1 ⩽ ki ⩽ 109). Обратите внимание, что значение ответа в этой задаче может превышать возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C++, тип long в Java и C#).
Ответ:
import sys
from bisect import bisect_left, bisect_right
data = sys.stdin.read().split()
n, t = int(data[0]), int(data[1])
k = sorted(map(int, data[2:2 + n]))
total = 0
for price in k:
near = bisect_right(k, price + t) — bisect_left(k, price — t)
total += (near — 1) * (n — near)
print(total)
