2026/27, Кружок для начинающих, Бинарный поиск

A: Сложность двоичного поиска

Вася загадал число от 1 до \(N\). За какое наименьшее количество вопросов (на которые Вася отвечает "да" или "нет") Петя может угадать Васино число?

Формат входных данных

Вводится одно число \(N\)

Формат выходных данных

Выведите наименьшее количество вопросов, которого гарантированно хватит Пете, чтобы угадать Васино число.

Примеры

ВводВывод
2
1
3
2

B: Левый и правый двоичный поиск

Дано два списка чисел, числа в первом списке упорядочены по неубыванию. Для каждого числа из второго списка определите номер первого и последнего появления этого числа в первом списке.

Формат входных данных

В первой строке входных данных записано два числа \(N\) и \(M\) (\(1\le N, M\le 20000\)). Во второй строке записано \(N\) упорядоченных по неубыванию целых чисел — элементы первого списка. В третьей строке записаны \(M\) целых неотрицательных чисел - элементы второго списка. Все числа в списках - целые 32-битные знаковые.

Формат выходных данных

Программа должна вывести \(M\) строчек. Для каждого числа из второго списка нужно вывести номер его первого и последнего вхождения в первый список. Нумерация начинается с единицы. Если число не входит в первый список, нужно вывести одно число \(0\).

Пример

ВводВывод
10 5
1 1 3 3 5 7 9 18 18 57
57 3 9 1 179

10 10
3 4
7 7
1 2
0


C: Приближенный двоичный поиск

Реализуйте алгоритм приближенного бинарного поиска.

Формат входных данных

В первой строке входных данных содержатся числа \(N\) и \(K\) (\(0 \lt N,\,K \lt 100\,001\)). Во второй строке задаются \(N\) чисел первого массива, отсортированного по неубыванию, а в третьей строке – \(K\) чисел второго массива. Каждое число в обоих массивах по модулю не превосходит \(2\cdot10^9\).

Формат выходных данных

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

Пример

ВводВывод
5 5
1 3 5 7 9 
2 4 8 1 6 

1
3
7
1
5


D: Дипломы

Когда Петя учился в школе, он часто участвовал в олимпиадах по информатике, математике и физике. Так как он был достаточно способным мальчиком и усердно учился, то на многих из этих олимпиад он получал дипломы. К окончанию школы у него накопилось \(n\) дипломов, причём, как оказалось, все они имели одинаковые размеры: \(w\) — в ширину и \(h\) — в высоту. Сейчас Петя учится в одном из лучших российских университетов и живёт в общежитии со своими одногруппниками. Он решил украсить свою комнату, повесив на одну из стен свои дипломы за школьные олимпиады. Так как к бетонной стене прикрепить дипломы достаточно трудно, то он решил купить специальную доску из пробкового дерева, чтобы прикрепить её к стене, а к ней — дипломы. Для того чтобы эта конструкция выглядела более красиво, Петя хочет, чтобы доска была квадратной и занимала как можно меньше места на стене. Каждый диплом должен быть размещён строго в прямоугольнике размером \(w\) на \(h\). Дипломы запрещается поворачивать на 90 градусов. Прямоугольники, соответствующие различным дипломам, не должны иметь общих внутренних точек. Требуется написать программу, которая вычислит минимальный размер стороны доски, которая потребуется Пете для размещения всех своих дипломов.

Формат входных данных

Входной файл содержит три целых числа: \(w\), \(h\), \(n\) (\(1\le w,h,n\le 10^9\)).

Формат выходных данных

В выходной файл необходимо вывести ответ на поставленную задачу.

Пример

ВводВывод
2 3 10

9


E: Провода

Дано \(N\) отрезков провода длиной \(L_{1},\, L_{2},\, \ldots,\, L_{N}\) сантиметров. Требуется с помощью разрезания получить из них \(K\) равных отрезков как можно большей длины, выражающейся целым числом сантиметров. Если нельзя получить \(K\) отрезков длиной даже \(1\) см, вывести \(0\).

Ограничения: \(1 \leq N \leq 10^{4},\; 1 \leq K \leq 10^{4},\; 10^{2} \leq L_{i} \leq 10^{7}\), все числа целые.

Формат входных данных

В первой строке находятся числа \(N\) и \(K\). В следующих \(N\) строках - \(L_{1},\, L_{2},\, \ldots,\, L_{N}\), по одному числу в строке.

Формат выходных данных

Вывести одно число - полученную длину отрезков.

Пример

ВводВывод
4 11
802
743
457
539

200


F: Коровы - в стойла

На прямой расположены стойла, в которые необходимо расставить коров так, чтобы минимальное расcтояние между коровами было как можно больше.

Формат входных данных

В первой строке вводятся числа \(N\) \((2 \lt N \lt 10001)\) – количество стойл и \(K\) (\(1 \lt K \lt N )\) – количество коров. Во второй строке задаются \(N\) натуральных чисел в порядке возрастания – координаты стойл (координаты не превосходят \(10^9\))

Формат выходных данных

Выведите одно число – наибольшее возможное допустимое расстояние.

Пример

ВводВывод
6 3
2 5 7 11 15 20

9


G: Очень Легкая Задача

Сегодня утром жюри решило добавить в вариант олимпиады еще одну, Очень Легкую Задачу. Ответственный секретарь Оргкомитета напечатал ее условие в одном экземпляре, и теперь ему нужно до начала олимпиады успеть сделать еще \(N\) копий. В его распоряжении имеются два ксерокса, один из которых копирует лист за \(х\) секунд, а другой – за \(y\). (Разрешается использовать как один ксерокс, так и оба одновременно. Можно копировать не только с оригинала, но и с копии.) Помогите ему выяснить, какое минимальное время для этого потребуется.

Формат входных данных

На вход программы поступают три натуральных числа \(N\), \(x\) и \(y\), разделенные пробелом \((1 \leq N \leq 2\cdot10^{8},\, 1 \leq x, y \leq 10)\).

Формат выходных данных

Выведите одно число – минимальное время в секундах, необходимое для получения \(N\) копий.

Примеры

ВводВывод
4 1 1

3

5 1 2

4


H: Космическое поселение

Для освоения Марса требуется построить исследовательскую базу. База должна состоять из \(n\) одинаковых модулей, каждый из которых представляет собой прямоугольник.

Каждый модуль представляет собой жилой отсек, который имеет форму прямоугольника размером \(a \times b\) метров. Для повышения надежности модулей инженеры могут добавить вокруг каждого модуля слой дополнительной защиты. Толщина этого слоя должна составлять целое число метров, и все модули должны иметь одинаковую толщину дополнительной защиты. Модуль с защитой, толщина которой равна \(d\) метрам, будет иметь форму прямоугольника размером \((a + 2d) \times (b + 2d)\) метров.

Все модули должны быть расположены на заранее подготовленном прямоугольном поле размером \(w \times h\) метров. При этом они должны быть организованы в виде регулярной сетки: их стороны должны быть параллельны сторонам поля, и модули должны быть ориентированы одинаково.

Требуется написать программу, которая по заданным количеству и размеру модулей, а также размеру поля для их размещения, определяет максимальную толщину слоя дополнительной защиты, который можно добавить к каждому модулю.

Формат входных данных

Строка содержит пять разделенных пробелами целых чисел: \(n\), \(a\), \(b\), \(w\) и \(h\) (\(1 \le n, a, b, w, h \le 10^{18}\)). Гарантируется, что без дополнительной защиты все модули можно разместить в поселении описанным образом.

Формат выходных данных

Ответ должен содержать одно целое число: максимальную возможную толщину дополнительной защиты. Если дополнительную защиту установить не удастся, требуется вывести число \(0\).

Примеры

ВводВывод
1 1 1 1 1

0

1 1 1 3 3

1


I: Вырубка леса

Фермер Николай нанял двух лесорубов: Дмитрия и Федора, чтобы вырубить лес, на месте которого должно быть кукурузное поле. В лесу растут \(X\) деревьев. Дмитрий срубает по A деревьев в день, но каждый \(K\)-й день он отдыхает и не срубает ни одного дерева. Таким образом, Дмитрий отдыхает в \(K\)-й, 2\(K\)-й, 3\(K\)-й день, и т.д. Федор срубает по B деревьев в день, но каждый \(M\)-й день он отдыхает и не срубает ни одного дерева. Таким образом, Федор отдыхает в \(M\)-й, 2\(M\)-й, 3\(M\)-й день, и т.д. Лесорубы работают параллельно и, таким образом, в дни, когда никто из них не отдыхает, они срубают \(A\) + \(B\) деревьев, в дни, когда отдыхает только Федор — \(A\) деревьев, а в дни, когда отдыхает только Дмитрий — \(B\) деревьев. В дни, когда оба лесоруба отдыхают, ни одно дерево не срубается. Фермер Николай хочет понять, за сколько дней лесорубы срубят все деревья, и он сможет засеять кукурузное поле. Требуется написать программу, которая по заданным целым числам \(A\), \(K\), \(B\), \(M\) и \(X\) определяет, за сколько дней все деревья в лесу будут вырублены.

Формат входных данных

Входной файл содержит пять целых чисел, разделенных пробелами: \(A\), \(K\), \(B\), \(M\) и \(X\) \((1 \leq A,\, B \leq 10^{9},\; 2 \leq K,\, M \leq 10^{18},\; 1 \leq X \leq 10^{18})\).

Формат выходных данных

Выходной файл должен содержать одно целое число — искомое количество дней.

Примеры

ВводВывод
1 2 1 3 10

8

1 2 1 3 11

9


J: Корень кубического уравнения

Дано кубическое уравнение \(ax^{3} + bx^{2} + cx + d = 0 \;(a \ne 0)\). Известно, что у этого уравнения ровно один корень. Требуется его найти.

Формат входных данных

Во входных данных через пробел записаны четыре целых числа: \(-1000 \le a,\,b,\,c,\,d \le 1000\).

Формат выходных данных

Выведите единственный корень уравнения с точностью не менее 4 знаков после десятичной точки.

Примеры

ВводВывод
1 -3 3 -1

0.999999598818135

-1 -6 -12 -7

-0.999999999990564