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

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

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

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

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

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

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

Примеры

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

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

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

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

В первой строке входных данных записано два числа \(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-1: Приближенный двоичный поиск

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

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

В первой строке входных данных содержатся числа \(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-1: Дипломы

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

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

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

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

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

Пример

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

E-2: Провода

Дано \(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-2: Коровы - в стойла

На прямой расположены стойла, в которые необходимо расставить коров так, чтобы минимальное рас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-2: Очень Легкая Задача

Сегодня утром жюри решило добавить в вариант олимпиады еще одну, Очень Легкую Задачу. Ответственный секретарь Оргкомитета напечатал ее условие в одном экземпляре, и теперь ему нужно до начала олимпиады успеть сделать еще \(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-2: Деление пополам

Дано действительное число \(a\) и натуральное \(n\). Вычислите корень \(n\)-й степени из числа \(a\).

Для решения используйте метод деления отрезка пополам.

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

Число \(a\)  действительное, неотрицательное, не превосходит \(1000\), задано с точностью до \(6\) знаков после запятой. Число \(n\)  натуральное, не превосходящее \(10\).

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

Программа должна вывести единственное число: ответ на задачу с точностью не менее \(6\) знаков после запятой.

Примеры

ВводВывод
2
2
1.41421356237
4
2
2.0

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

Дано кубическое уравнение \(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

J-3: Космическое поселение

Для освоения Марса требуется построить исследовательскую базу. База должна состоять из \(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

K-3: Вырубка леса

Фермер Николай нанял двух лесорубов: Дмитрия и Федора, чтобы вырубить лес, на месте которого должно быть кукурузное поле. В лесу растут \(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

L-3: Субботник

В классе учатся \(N\) человек. Классный руководитель получил указание направить на субботник \(R\)  бригад по \(С\) человек в каждой.

Все бригады на субботнике будут заниматься переноской бревен. Каждое бревно одновременно несут все члены одной бригады. При этом бревно нести тем удобнее, чем менее различается рост членов этой бригады.

\(Числом неудобства\) бригады будем называть разность между ростом самого высокого и ростом самого низкого членов этой бригады (если в бригаде только один человек, то эта разница равна 0). Классный руководитель решил сформировать бригады так, чтобы максимальное из чисел неудобства сформированных бригад было минимально. Помогите ему в этом!

Рассмотрим следующий пример. Пусть в классе 8 человек, рост которых в сантиметрах равен 170, 205, 225, 190, 260, 130, 225, 160, и необходимо сформировать две бригады по три человека в каждой. Тогда одним из вариантов является такой:

1 бригада: люди с ростом 225, 205, 225

2 бригада: люди с ростом 160, 190, 170

При этом число неудобства первой бригады будет равно 20, а число неудобства второй — 30. Максимальное из чисел неудобств будет 30, и это будет наилучший возможный результат.

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

Сначала вводятся натуральные числа \(N\), \(R\) и \(C\) — количество человек в классе, количество бригад и количество человек в каждой бригаде \((1 \leq R \cdot C \leq N \leq 10^{5})\). Далее вводятся \(N\) целых чисел — рост каждого из \(N\) учеников. Рост ученика — натуральное число, не превышающее \(10^{9}\).

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

Выведите одно число — наименьше возможное значение максимального числа неудобства сформированных бригад.

Пример

ВводВывод
8 2 3
170
205
225
190
260
130
225
160
30

M-3: Поиск в словаре

Словарь задан массивом отсортированных в лексикографическом порядке строк. Напишите программу эффективного поиска слова в словаре.

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

На вход программе сначала подается искомое слово, во второй строке — число \(n\) \((1 \leq n \leq 10^{5})\) — количество слов в словаре. В следующих \(n\) строках расположены слова словаря, по одному слову в строке. Все слова состоят только из строчных латинских букв, слова упорядочены по алфавиту (расположены в лексикографическом порядке).

Длина слов не превосходит \(20\). Пустых слов нет.

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

Выведите YES или NO в зависимости от того, есть искомое слово в словаре или нет.

Пример

ВводВывод
abba
4
a
ab
aba
baba
NO

N-3: Раскраска кубиков

На день рождения Пете подарили коробку кубиков. На каждом кубике написано некоторое целое число. Петя выложил все \(n\) своих кубиков в ряд, так что числа на кубиках оказались расположены в некотором порядке \(a_{1}, \, a_{2}, \, \ldots, \, a_{n}\). Теперь он хочет раскрасить кубики в разные цвета таким образом, чтобы для каждого цвета последовательность чисел на кубиках этого цвета была строго возрастающей. То есть, если кубики с номерами \(i_{1}, \, i_{2}, \, \ldots, \, i_{k}\) покрашены в один цвет, то \(a_{i_1} \lt a_{i_2}\lt ... \lt a_{i_k}\). Петя хочет использовать как можно меньше цветов. Помогите ему!

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

Первая строка входного файла содержит число \(n\) - количество кубиков у Пети (\(1 \le n \le 250000\)). В следующей строке записано \(n\) чисел \(a_{1}, \, a_{2}, \, \ldots, \, a_{k} \; (-2^{31} \le a_{i} \le 2^{31} - 1)\).

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

На первой строке выходного файла выведите число \(m\) — наименьшее количество цветов, которое потребуется Пете. На следующей строке выведите \(n\) чисел из диапазона от \(1\) до \(m\) — цвета, в которые Петя должен покрасить кубики.

Пример

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