| | | |
|
Количество чисел, равное искомому
Бинарный поиск в массиве
Требуется определить в заданном массиве количество элементов, равных искомому числу.
Входные данные
В первой строке вводится одно натуральное число N, не превосходящее 105: количество чисел в массиве.
Во второй строке вводятся N натуральных чисел, не превосходящих 109, каждое следующее не меньше предыдущего.
В третьей строке вводится количество искомых чисел M - натуральное число, не превосходящее 106.
В четвертой строке вводится M натуральных чисел, не превосходящих 109.
Выходные данные
Для каждого запроса выведите в отдельной строке одно число: количество элементов массива, равных числу-запросу. Элементы массива нумеруются с единицы.
Если в массиве нет такого числа, выведите 0.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4
1 2 2 4
4
1 4 3 2 |
1
1
0
2 |
| |
|
|
Двоичный поиск
Бинарный поиск в массиве
Алгоритмы поиска
Реализуйте алгоритм бинарного поиска.
Формат входных данных
В первой строке входных данных содержатся натуральные числа N и K (\(0<N,\ K <= 100000\)). Во второй строке задаются N элементов первого массива, отсортированного по возрастанию. В третьей строке – K элементов второго массива.
Элементы обоих массивов - целые числа, каждое из которых по модулю не превосходит \(10^9\).
Формат выходных данных
Требуется для каждого из K чисел вывести в отдельную строку "YES", если это число встречается в первом массиве, и "NO" в противном случае.
| |
|
|
Левый и правый двоичный поиск
Бинарный поиск в массиве
Дано два списка чисел, числа в первом списке упорядочены по неубыванию. Для каждого числа из второго списка определите номер первого и последнего появления этого числа в первом списке.
Формат входных данных
В первой строке входных данных записано два числа N и M (\(1<=N,\ M <=20000\)). Во второй строке записано N упорядоченных по неубыванию целых чисел — элементы первого списка. В третьей строке записаны M целых неотрицательных чисел - элементы второго списка.
Все числа в списках - целые 32-битные знаковые.
Формат входных данных
Программа должна вывести M строчек. Для каждого числа из второго списка нужно вывести номер его первого и последнего вхождения в первый список. Нумерация начинается с единицы. Если число не входит в первый список, нужно вывести одно число 0.
| |
|
|
Словарь
Динамическое программирование: один параметр
Бинарный поиск в массиве
У Васи на клавиатуре не работает клавиша пробел. Поэтому все тексты он теперь набирает слитно. Напишите программу, которая будет разделять набранный Васей текст на слова из данного словаря.
Входные данные
Сначала на вход программы поступает текст, введенный Васей – одна строка из не более чем 100 латинских строчных букв. В следующей строке входных данных задается значение N – количество слов в словаре (N – натуральное число, не превосходящее 2000). В следующих N строках записаны слова из словаря – по одному слову в строке, каждое слово содержит не более 20 латинских строчных букв. Слова записаны в алфавитном порядке.
Выходные данные
Выведите Васин текст с пробелами между словами (пробел после последнего слова допустим). Если возможно несколько вариантов разбиения строки на слова, выведите любой их них. Гарантируется, что хотя бы один способ разбиения строки на словарные слова существует.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
whatcanido
6
a
an
can
do
i
what |
what can i do |
| |
|
|
Выбор цветов для букета
Бинарный поиск в массиве
Префиксные суммы(минимумы, ...)
Володя хочет красиво поздравить свою жену с годовщиной их свадьбы и собирается подарить ей букет из n цветов.
Придя в цветочный магазин, Володя обнаружил, что букет можно составлять из цветов m различных видов, причём количество цветов каждого вида не ограничено. Володя знает, что от первого цветка i-го вида в букете его супруга становится счастливее на ai, а от каждого следующего цветка
такого вида она становится счастливее на bi. То есть, если в букете xi > 0 цветов вида i, то от цветов этого вида жена Володи становится счастливее на ai + (xi − 1) · bi.
Как любой любящий муж, Володя хочет как можно сильнее порадовать свою супругу. Поэтому ему хочется знать, на какую максимальную величину может увеличиться её счастье от букета, набранного из доступных в магазине цветов.
Формат входных данных
В первой строке вводятся два целых числа n и m (1 ≤ n ≤ 109 , 1 ≤ m ≤ 100 000) — требуемое
количество цветов в букете и количество доступных видов цветов.
Каждая из следующих m строк описывает i-й вид цветов и содержит два целых числа ai и bi (0 ≤ ai , bi ≤ 109 ) — увеличение счастья от первого цветка i-го вида и увеличение счастья от каждого последующего цветка этого вида.
Формат выходных данных
В единственной строке выведите одно число — максимальное увеличение счастья, которое может получить жена Володи от букета из n цветов.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4 3
5 0
1 4
2 2 |
14 |
| 2 |
5 3
5 2
4 2
3 1 |
16 |
| |
|
|
То березка, то рябина…
Бинарный поиск в массиве
Бинарный поиск по ответу
Жадный алгоритм
В целях улучшения ландшафтной архитектуры и экологической обстановки управление городского хозяйства разработало проект программы озеленения центрального проспекта. Согласно проекту, с одной стороны проспекта планируется высадить в ряд деревья K различных видов, для чего были закуплены саженцы деревьев, причем i-го вида было закуплено ai саженцев.
Для достижения эстетического совершенства высаживаемого ряда деревьев требуется, чтобы среди любых P подряд идущих деревьев все деревья были разных видов. Если количество деревьев в ряду меньше P, то все они должны быть различны.
Требуется написать программу, которая находит максимальное количество деревьев в эстетически совершенном ряду, посаженном из закупленных саженцев.
Входные данные
В первой строке вводятся два целых числа: K — количество различных видов деревьев (1 ≤ K ≤ 100 000), и P — требуемое количество подряд идущих деревьев разных видов (2 ≤ P ≤ K). Последующие K строк входных данных содержат целые числа ai, задающие количество закупленных саженцев деревьев i-го вида (1 ≤ ai ≤ 109), по одному числу в каждой строке.
Выходные данные
Выведите единственное число — максимальное количество деревьев, посадка которых в ряд в некотором порядке достигает эстетического совершенства.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3 3
1
200
1 |
4 |
| |
|
|
Ресторан
Динамическое программирование
Использование сортировки
Бинарный поиск в массиве
Ресторан получил n заказов на проведение банкета. Каждый заказ характеризуется двумя величинами: моментом начала банкета li и моментом конца ri (li ≤ ri).
Руководство ресторана может либо принять заказ, либо отвергнуть его. Какое наибольшее количество заказов может быть принято?
Никакие два принятых заказа не могут пересекаться, то есть не должно существовать момента времени, который принадлежит сразу двум принятым заказам. Если один из заказов начинается в момент, когда заканчивается другой, то они не могут быть приняты вместе.
Входные данные:
В первой строке находится целое число n (1 ≤ n ≤ 200000) — количество заказов. В каждой из следующих n строк находится пара целых чисел li, ri (0 ≤ li ≤ ri ≤ 109).
Выходные данные:
Выведите наибольшее количество заказов, которые могут быть приняты.
Примеры:
| Входные данные |
Выходные данные |
2
7 11
4 7 |
1 |
5
1 2
2 3
3 4
4 5
5 6 |
3 |
6
4 8
1 5
4 7
2 5
1 3
6 8 |
2 |
| |
|
|
Межрегиональная олимпиада
Бинарный поиск в массиве
Динамическое программирование
Жадный алгоритм
На межрегиональной олимпиаде по программированию роботов соревнования проводятся в один тур и в необычном формате. Задачи участникам раздаются последовательно, а не все в самом начале тура, и каждая i-я задача (1 ≤ i ≤ n) становится доступной участникам в свой момент времени si. При поступлении очередной задачи каждый участник должен сразу определить, будет он ее решать или нет. В случае, если он выбирает для решения эту задачу, то у него есть ti минут на то, чтобы сдать ее решение на проверку, причем в течение этого времени он не может переключиться на решение другой задачи. Если же участник отказывается от решения этой задачи, то в будущем он не может к ней вернуться. В тот момент, когда закончилось время, отведенное на задачу, которую решает участник, он может начать решать другую задачу, ставшую доступной в этот же момент, если такая задача есть, или ждать появления другой задачи. При этом за правильное решение i-й задачи участник получает ci баллов.
Артур, представляющий на межрегиональной олимпиаде один из региональных центров искусственного интеллекта, понимает, что важную роль на такой олимпиаде играет не только умение решать задачи, но и правильный стратегический расчет того, какие задачи надо решать, а какие пропустить. Ему, как и всем участникам, до начала тура известно, в какой момент времени каждая задача станет доступной, сколько времени будет отведено на ее решение и сколько баллов можно получить за ее решение. Артур является талантливым школьником и поэтому сможет успешно решить за отведенное время и сдать на проверку любую задачу, которую он выберет для решения на олимпиаде.
Требуется написать программу, которая определяет, какое максимальное количество баллов Артур сможет получить при оптимальном выборе задач, которые он будет решать, а также количество и перечень таких задач.
Входные данные
Первая строка содержит одно целое число n (1 ≤ n ≤ 105) количество задач на олимпиаде.
Последующие n строк содержат описания задач, по три числа на каждой строке: si момент появления i-й задачи в минутах, ti время, отведенное на ее решение в минутах, и ci сколько баллов получит участник за решение этой задачи (1 ≤ si, ti, ci ≤ 109).
Выходные данные
Первая строка должна содержать одно число – максимальное количество баллов, которое сможет получить Артур на олимпиаде.
Вторая строка должна содержать одно целое число m - количество задач, которые надо решить при оптимальном выборе.
Третья строка должна содержать m разделенных пробелом целых чисел - номера этих задач в порядке их решения. Задачи пронумерованы, начиная с единицы, в порядке их описания во входном файле.
Если оптимальных ответов несколько, необходимо вывести любой из них.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
2
1 1 1
2 2 2 |
3
2
1 2 |
| 2 |
3
1 2 1
3 2 1
2 4 3 |
3
1
3 |
| |
|
|
Приближенный двоичный поиск
Бинарный поиск
Бинарный поиск в массиве
Реализуйте алгоритм приближенного бинарного поиска.
Формат входных данных
В первой строке входных данных содержатся числа N и K (\(0< N,\ K <100001\)). Во второй строке задаются N чисел первого массива, отсортированного по неубыванию. В третьей строке вводится K чисел второго массива.
Каждое число в обоих массивах по модулю не превосходит \(2 \cdot 10^9\).
Формат выходных данных
Для каждого из K чисел выведите в отдельную строку число из первого массива, наиболее близкое к данному. Если таких несколько, выведите меньшее из них.
| |
|
|
Сложность двоичного поиска
Бинарный поиск
Бинарный поиск в массиве
Вася загадал число от 1 до N. За какое наименьшее количество вопросов (на которые Вася отвечает "да" или "нет") Петя может угадать Васино число?
Входные данные
Вводится одно число N
Выходные данные
Выведите наименьшее количество вопросов, которого гарантированно хватит Пете, чтобы угадать Васино число.
| |
|
|
Номера равных заданному
Бинарный поиск в массиве
Требуется определить в заданном массиве номер самого левого и самого правого элемента, равного искомому числу.
Входные данные
В первой строке вводится одно натуральное число N, не превосходящее 105: количество чисел в массиве.
Во второй строке вводятся N натуральных чисел, не превосходящих 109, каждое следующее не меньше прелылущего.
В третьей строке вводится количество искомых чисел M - натуральное число, не превосходящее 106.
В четвертой строке вводится M натуральных чисел, не превосходящих 109.
Выходные данные
Для каждого запроса выведите в отдельной строке через пробел два числа: номер элемента самого левого и самого правого элементов массива, равных числу-запросу. Элементы массива нумеруются с единицы.
Если в массиве нет такого числа, выведите в соответствующей строке два нуля, разделенных пробелом.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4
1 2 2 3
4
4 3 2 1
|
0 0
4 4
2 3
1 1
|
| |
|
|
Ближайшее слева
Бинарный поиск в массиве
Дан массив из n чисел, отсортированный по неубыванию, и k запросов. Для каждого запроса выведите максимальный номер элемента массива, не большего данного (нумерация элементов массива начинается с 1).
Входные данные
В первой строке входных данных содержатся числа n и k (0 < n, k <= 105) — длина массива и число запросов. Во второй строке содержатся n элементов массива, отсортированного по неубыванию. В третьей строке содержатся k запросов. Все элементы массива и запросы — целые числа, каждое из которых по модулю не превосходит 2⋅109 .
Выходные данные
Для каждого из k запросов выведите максимальный номер элемента массива, не большего данного. Если таких нет, выведите 0.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5 5
3 3 5 8 9
2 4 8 1 10
|
0
2
4
0
5
|
| |
|
|
Количество чисел - 2
Бинарный поиск в массиве
Дан массив a из n целых чисел a1, a2,..., an. Научитесь быстро отвечать на запросы «Сколько чисел имеют значения от l до r»?
Входные данные
В первой строке находится целое число n (1<=n<=105) — длина массива. Во второй строке находятся n целых чисел a1, a2,..., an (−109<=ai<=109). В третьей строке находится целое число k (1<=k<=105) — число запросов. В следующих k строках находятся пары чисел l r (−109<=l<=r<=109).
Выходные данные
Выведите k чисел (каждое в отдельной строке) - ответы на запросы.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5
10 1 10 3 4
4
1 10
2 9
3 4
2 2
|
5
2
2
0
|
| |
|
|
Последний элемент > x
Бинарный поиск в массиве
Дан массив из n чисел, отсортированный по невозрастанию, и k запросов. Для каждого запроса выведите максимальный номер элемента массива, большего данного (нумерация элементов массива начинается с 1).
Входные данные
В первой строке входных данных содержатся числа n и k (0 < n, k <= 105) — длина массива и число запросов. Во второй строке содержатся n элементов массива, отсортированного по невозрастанию. В третьей строке содержатся k запросов. Все элементы массива и запросы — целые числа, каждое из которых по модулю не превосходит 2⋅109 .
Выходные данные
Для каждого из k запросов выведите максимальный номер элемента массива, большего данного. Если таких нет, выведите 0.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5 5
9 8 5 3 3
2 4 8 1 10
|
5
3
1
5
0
|
| |
|
|
Последний элемент, меньший данного
Бинарный поиск в массиве
Дан массив из n чисел, отсортированный по неубыванию, и k запросов. Для каждого запроса выведите максимальный номер элемента массива, меньший данного (нумерация элементов массива начинается с 1).
Входные данные
В первой строке входных данных содержатся числа n и k (0 < n, k <= 105) — длина массива и число запросов. Во второй строке содержатся n элементов массива, отсортированного по неубыванию. В третьей строке содержатся k запросов. Все элементы массива и запросы — целые числа, каждое из которых по модулю не превосходит 2⋅109 .
Выходные данные
Для каждого из k запросов выведите максимальный номер элемента массива, меньший данного. Если таких нет, выведите 0.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5 5
3 3 5 8 9
2 4 8 1 10
|
0
2
3
0
5
|
| |
|
|
Первый, меньший данного
Бинарный поиск в массиве
Дан массив из n чисел, отсортированный по невозрастанию, и k запросов. Для каждого запроса выведите минимальный номер элемента массива, меньший данного (нумерация элементов массива начинается с 1).
Входные данные
В первой строке входных данных содержатся числа n и k (0 < n, k <= 105) — длина массива и число запросов. Во второй строке содержатся n элементов массива, отсортированного по невозрастанию. В третьей строке содержатся k запросов. Все элементы массива и запросы — целые числа, каждое из которых по модулю не превосходит 2⋅109 .
Выходные данные
Для каждого из k запросов выведите минимальный номер элемента массива, меньше данного. Если таких нет, выведите 0.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5 5
9 8 5 3 3
2 4 8 1 10
|
0
4
3
0
1
|
| |
|
|
Калитка в заборе
"Два указателя"
Бинарный поиск в массиве
Дядя Фёдор, кот Матроскин и Шарик решили обновить забор вокруг своего сада в Простоквашино. Матроскин и Шарик, недолго думая, вкопали N столбов вдоль одной из сторон участка. Это очень сильно расстроило Дядю Фёдора, так как его друзья забыли о самом главном — калитка должна находиться именно на этой стороне, и для неё необходимо было оставить проём шириной как минимум W. Теперь им придётся выкапывать некоторые столбы.
Чтобы работа не пропадала даром, выкопать надо как можно меньше столбов. Помогите Дяде Фёдору определить, какие именно столбы надо выкопать. После выкапывания столбов должен найтись промежуток (между двумя оставшимися столбами, или между оставшимся столбом и концом стороны участка, или между двумя концами стороны участка) ширины больше или равной W.
Входные данные
Первая строка содержит два целых числа N и W — количество вкопанных столбов и минимально необходимую ширину проёма для калитки соответственно. Гарантируется, что 0<=N<=30000 и что 0<=W<=60000.
Будем считать, что вдоль интересующей нас стороны участка введена ось координат. Во второй строке входного файла находятся два числа L и R — координаты левого и правого конца этой стороны (LR). Далее следуют N чисел — координаты вкопанных столбов. Все координаты (включая L и R) — различные целые числа, по модулю не превосходящие 30000. Гарантируется, что все столбы вкопаны между левым и правым концами стороны.
Выходные данные
В первой строке выходного файла должно быть минимальное число столбов, которые надо выкопать. Далее должны следовать номера этих столбов. Столбы нумеруются в том порядке, как они указаны во входном файле, начиная с 1.
Если решений несколько, то вы можете вывести любое. Если решения нет, то выведите в выходной файл одну строку, содержащую число -1.
| Ввод |
Вывод |
|
3 2
2 6
3 4 5
|
1
2 |
|
3 2
1 6
4 3 5
|
0 |
|
3 5
1 7
5 3 4
|
3
2
1
3
|
| |
|
|
Бинарный поиск в невозрастающем массиве - 1
Бинарный поиск в массиве
Дан одномерный массив, отсортированный по невозрастанию. Дополните функцию binSearch() таким образом, чтобы она возвращала в программу индекс последнего элемента большего key. В случае, если такого элемента в массиве нет, функция должна возвращать -1.
| |
|
|
Бинарный поиск в невозрастающем массиве - 2
Бинарный поиск в массиве
Дан одномерный массив, отсортированный по невозрастанию. Дополните функцию binSearch() таким образом, чтобы она возвращала в программу индекс последнего элемента большего или равного key. В случае, если такого элемента в массиве нет, функция должна возвращать -1.
| |
|
|
Бинарный поиск в невозрастающем массиве - 3
Бинарный поиск в массиве
Дан одномерный массив, отсортированный по невозрастанию. Дополните функцию binSearch() таким образом, чтобы она возвращала в программу индекс последнего элемента равного key. В случае, если такого элемента в массиве нет, функция должна возвращать -1.
| |
|
|
Бинарный поиск в невозрастающем массиве - 4.1
Бинарный поиск в массиве
Дан одномерный массив, отсортированный по невозрастанию. Дополните функцию binSearch() таким образом, чтобы она возвращала в программу индекс первого элемента меньшего key. В случае, если такого элемента в массиве нет, функция должна возвращать -1.
| |
|
|
Бинарный поиск в невозрастающем массиве - 4.2
Бинарный поиск в массиве
Дан одномерный массив, отсортированный по невозрастанию. Дополните функцию binSearch() таким образом, чтобы она возвращала в программу индекс первого элемента меньшего key. В случае, если такого элемента в массиве нет, функция должна возвращать -1.
| |
|
|
Бинарный поиск в невозрастающем массиве - 5
Бинарный поиск в массиве
Дан одномерный массив, отсортированный по невозрастанию. Дополните функцию binSearch() таким образом, чтобы она возвращала в программу индекс первого элемента меньшего или равного key. В случае, если такого элемента в массиве нет, функция должна возвращать -1.
| |
|
|
Бинарный поиск в невозрастающем массиве - 6
Бинарный поиск в массиве
Дан одномерный массив, отсортированный по невозрастанию. Дополните функцию binSearch() таким образом, чтобы она возвращала в программу индекс первого элемента равного key. В случае, если такого элемента в массиве нет, функция должна возвращать -1.
| |
|
|
Массивы
Бинарный поиск в массиве
Дано два массива. Для каждого элемента второго массива определите, сколько раз он встречается в первом массиве.
Входные данные
Первая строка входных данных содержит одно число N (1 ≤ N ≤ 105) – количество элементов в первом массиве. Далее идет N целых чисел, не превосходящих по модулю 109 – элементы первого массива, Далее идет количество элементов M во втором массиве и M элементов второго массива с такими же ограничениями.
Выходные данные
Выведите M чисел: для каждого элемента второго массива выведите, сколько раз такое значение встречается в первом массиве.
| |
|
|
Контрольная по ударениям
Строки
Бинарный поиск в массиве
Учительница задала Пете домашнее задание — в заданном тексте расставить ударения в словах, после чего поручила Васе проверить это домашнее задание. Вася очень плохо знаком с данной темой, поэтому он нашел словарь, в котором указано, как ставятся ударения в словах. К сожалению, в этом словаре присутствуют не все слова. Вася решил, что в словах, которых нет в словаре, он будет считать, что Петя поставил ударения правильно, если в этом слове Петей поставлено ровно одно ударение.
Оказалось, что в некоторых словах ударение может быть поставлено больше, чем одним способом. Вася решил, что в этом случае если то, как Петя поставил ударение, соответствует одному из приведенных в словаре вариантов, он будет засчитывать это как правильную расстановку ударения, а если не соответствует, то как ошибку.
Вам дан словарь, которым пользовался Вася и домашнее задание, сданное Петей. Ваша задача — определить количество ошибок, которое в этом задании насчитает Вася.
Входные данные
Вводится сначала число N — количество слов в словаре (0≤N≤20000).
Далее идет N строк со словами из словаря. Каждое слово состоит не более чем из 30 символов. Все слова состоят из маленьких и заглавных латинских букв. В каждом слове заглавная ровно одна буква — та, на которую попадает ударение. Слова в словаре расположены в алфавитном порядке. Если есть несколько возможностей расстановки ударения в одном и том же слове, то эти варианты в словаре идут в произвольном порядке.
Далее идет упражнение, выполненное Петей. Упражнение представляет собой строку текста, суммарным объемом не более 300000 символов. Строка состоит из слов, которые разделяются между собой ровно одним пробелом. Длина каждого слова не превышает 30 символов. Все слова состоят из маленьких и заглавных латинских букв (заглавными обозначены те буквы, над которыми Петя поставил ударение). Петя мог по ошибке в каком-то слове поставить более одного ударения или не поставить ударения вовсе.
Выходные данные
Выведите количество ошибок в Петином тексте, которые найдет Вася.
Примечание
1) В слове cannot, согласно словарю возможно два варианта расстановки ударения. Эти варианты в словаре могут быть перечислены в любом порядке (т.е. как сначала cAnnot, а потом cannOt, так и наоборот).
Две ошибки, совершенные Петей — это слова be (ударение вообще не поставлено) и fouNd (ударение поставлено неверно). Слово thE отсутствует в словаре, но поскольку в нем Петя поставил ровно одно ударение, признается верным.
2) Неверно расставлены ударения во всех словах, кроме The (оно отсутствует в словаре, в нем поставлено ровно одно ударение). В остальных словах либо ударные все буквы (в слове PAGE), либо не поставлено ни одного ударения.
| |
|
|
Медиана объединений
Бинарный поиск по ответу
Бинарный поиск в массиве
Дано N упорядоченных по неубыванию последовательностей целых чисел (т.е. каждый следующий элемент больше либо равен предыдущему), в каждой из последовательностей ровно L элементов. Для каждых двух последовательностей выполняют следующую операцию: объединяют их элементы (в объединенной последовательности каждое число будет идти столько раз, сколько раз оно встречалось суммарно в объединяемых последовательностях), упорядочивают их по неубыванию и смотрят, какой элемент в этой последовательности из 2L элементов окажется на месте номер L (этот элемент называют левой медианой).
Напишите программу, которая для каждой пары последовательностей выведет левую медиану их объединения.
Входные данные
Сначала вводятся числа N и L (2≤N≤200, 1≤L≤50000). В следующих N строках задаются параметры, определяющие последовательности.
Каждая последовательность определяется пятью целочисленными параметрами: x1, d1, a, c, m. Элементы последовательности вычисляются по следующим формулам: x1 нам задано, а для всех i от 2 до L: x1 = x1–1+di-1. Последовательность di определяется следующим образом: d1 нам задано, а для i≥2 di=((a*di-1+c) mod m), где mod – операция получения остатка от деления (a*di-1+c) на m.
Для всех последовательностей выполнены следующие ограничения: 1≤m≤40000, 0≤a<m, 0≤c<m, 0≤d1<m. Гарантируется, что все члены всех последовательностей по модулю не превышают 109.
Выходные данные
В первой строке выведите медиану объединения 1-й и 2-й последовательностей, во второй строке — объединения 1-й и 3-й, и так далее, в (N-1)-ой строке — объединения 1-й и N-ой последовательностей, далее медиану объединения 2-й и 3-й, 2-й и 4-й, и т.д. до 2-й и N-ой, затем 3-й и 4-й и так далее. В последней строке должна быть выведена медиана объединения (N–1)-й и N-ой последовательностей.
| |
|
|
Медиана объединений
Бинарный поиск по ответу
Бинарный поиск в массиве
Дано N упорядоченных по неубыванию последовательностей целых чисел (т.е. каждый следующий элемент больше либо равен предыдущему), в каждой из последовательностей ровно L элементов. Для каждых двух последовательностей выполняют следующую операцию: объединяют их элементы (в объединенной последовательности каждое число будет идти столько раз, сколько раз оно встречалось суммарно в объединяемых последовательностях), упорядочивают их по неубыванию и смотрят, какой элемент в этой последовательности из 2L элементов окажется на месте номер L (этот элемент называют левой медианой).
Напишите программу, которая для каждой пары последовательностей выведет левую медиану их объединения.
Входные данные
Сначала вводятся числа N и L (2≤N≤100, 1≤L≤300). В следующих N строках задаются параметры, определяющие последовательности.
Каждая последовательность определяется пятью целочисленными параметрами: x1, d1, a, c, m. Элементы последовательности вычисляются по следующим формулам: x1 нам задано, а для всех i от 2 до L: x1 = x1–1+di-1. Последовательность di определяется следующим образом: d1 нам задано, а для i≥2 di=((a*di-1+c) mod m), где mod – операция получения остатка от деления (a*di-1+c) на m.
Для всех последовательностей выполнены следующие ограничения: 1≤m≤40000, 0≤a<m, 0≤c<m, 0≤d1<m. Гарантируется, что все члены всех последовательностей по модулю не превышают 109.
Выходные данные
В первой строке выведите медиану объединения 1-й и 2-й последовательностей, во второй строке — объединения 1-й и 3-й, и так далее, в (N-1)-ой строке — объединения 1-й и N-ой последовательностей, далее медиану объединения 2-й и 3-й, 2-й и 4-й, и т.д. до 2-й и N-ой, затем 3-й и 4-й и так далее. В последней строке должна быть выведена медиана объединения (N–1)-й и N-ой последовательностей.
| |
|
|
Контрольная по ударениям
Строки
Бинарный поиск в массиве
Учительница задала Пете домашнее задание — в заданном тексте расставить ударения в словах, после чего поручила Васе проверить это домашнее задание. Вася очень плохо знаком с данной темой, поэтому он нашел словарь, в котором указано, как ставятся ударения в словах. К сожалению, в этом словаре присутствуют не все слова. Вася решил, что в словах, которых нет в словаре, он будет считать, что Петя поставил ударения правильно, если в этом слове Петей поставлено ровно одно ударение.
Оказалось, что в некоторых словах ударение может быть поставлено больше, чем одним способом. Вася решил, что в этом случае если то, как Петя поставил ударение, соответствует одному из приведенных в словаре вариантов, он будет засчитывать это как правильную расстановку ударения, а если не соответствует, то как ошибку.
Вам дан словарь, которым пользовался Вася и домашнее задание, сданное Петей. Ваша задача — определить количество ошибок, которое в этом задании насчитает Вася.
Входные данные
Вводится сначала число N — количество слов в словаре (0≤N≤100).
Далее идет N строк со словами из словаря. Каждое слово состоит не более чем из 30 символов. Все слова состоят из маленьких и заглавных латинских букв. В каждом слове заглавная ровно одна буква — та, на которую попадает ударение. Слова в словаре расположены в алфавитном порядке. Если есть несколько возможностей расстановки ударения в одном и том же слове, то эти варианты в словаре идут в произвольном порядке.
Далее идет упражнение, выполненное Петей. Упражнение представляет собой строку текста, суммарным объемом не более 30000 символов. Строка состоит из слов, которые разделяются между собой ровно одним пробелом. Длина каждого слова не превышает 30 символов. Все слова состоят из маленьких и заглавных латинских букв (заглавными обозначены те буквы, над которыми Петя поставил ударение). Петя мог по ошибке в каком-то слове поставить более одного ударения или не поставить ударения вовсе.
Выходные данные
Выведите количество ошибок в Петином тексте, которые найдет Вася.
Примечание
1) В слове cannot, согласно словарю возможно два варианта расстановки ударения. Эти варианты в словаре могут быть перечислены в любом порядке (т.е. как сначала cAnnot, а потом cannOt, так и наоборот).
Две ошибки, совершенные Петей — это слова be (ударение вообще не поставлено) и fouNd (ударение поставлено неверно). Слово thE отсутствует в словаре, но поскольку в нем Петя поставил ровно одно ударение, признается верным.
2) Неверно расставлены ударения во всех словах, кроме The (оно отсутствует в словаре, в нем поставлено ровно одно ударение). В остальных словах либо ударные все буквы (в слове PAGE), либо не поставлено ни одного ударения.
| |
|
|
Подарки в хранилище
Бинарный поиск
Бинарный поиск в массиве
Дед Мороз хранит огромные запасы подарков в своих тайных хранилищах. Хранилище состоит из ячеек, нумерация которых начинается с единицы. В каждой ячейке находится строго один подарок. Одинаковые подарки хранятся в идущих подряд ячейках. Подарки в хранилище отсортированы по алфавиту.
Увы, несмотря на то, что запасы Деда Мороза огромны, некоторых особо оригинальных подарков может не оказаться в наличии в ближайшем к нему в данный момент хранилище.
Дед Мороз получил письмо от мальчика Вити с целым списком таких оригинальных подарков. Помогите Деду Морозу — напишите программу, определяющую наличие заказанных Витей подарков в хранилище.
Формат ввода
В первой строке вводится натуральное число \(n\) — количество ячеек в ближайшем в данный момент к Деду Морозу хранилище (\(1\leqslant n\leqslant 10^6\)).
В последующих \(n\) строках вводятся названия подарков, хранящихся в ячейках рассматриваемого хранилища (в порядке возрастания номеров ячеек), — слова, состоящие из строчных латинских букв.
Далее в отдельной строке вводится натуральное число \(k\) — количество подарков, указанных в письме Вити (\(1\leqslant k\leqslant 10^5\)).
В последующих \(k\) строках вводятся названия подарков из списка Вити.
Формат вывода
Для каждого подарка из списка Вити программа должна вывести в отдельной строке одно из двух возможных сообщений.
Если указанный Витей подарок имеется в хранилище, программа должна вывести сообщение "In stock".
В противном случае должно быть выведено сообщение "Not in stock".
| |
|
|
Построение снеговиков
Бинарный поиск
Бинарный поиск в массиве
В резиденции Деда Мороза проходит организационное построение снеговиков. Они строятся в линию в порядке убывания роста (т.е. снеговик под номером 1 самый высокий). Все снеговики различного роста.
Построение уже началось. Все снеговики уже выстроились в ряд, а снеговичок Холодок опоздал, и ему нужно как можно быстрее найти своё место в строю. Помогите Холодку это сделать с помощью программы.
Формат ввода
В первой строке на вход программы подаётся единственное целое неотрицательное число \(n\) — количество уже построившихся снеговиков (\(0\leqslant n\leqslant 10^6\)).
Далее, если \(n>0\), в одной строке через пробел вводится \(n\) значений роста построившихся снеговиков в порядке убывания. Рост каждого снеговика индивидуален, т.е. нет двух снеговиков одинакового роста. Значения роста целые и принадлежат множеству \((0; 10^9]\).
В целях проверки корректности работы программы в следующей строке вводится натуральное число \(k\) — количество возможных значений роста Холодка (\(1\leqslant k\leqslant 10^5\)), а затем в отдельной строке через пробел передаются эти \(k\) значений (целых), принадлежащих множеству \((0; 10^9]\). Рост Холодка отличается от роста всех остальных снеговиков.
Формат вывода
Для каждого введённого значения роста Холодка выведите в отдельной строке номер места Холодка в строю.
| |
|
|
Подарки в хранилище 2
Бинарный поиск
Бинарный поиск в массиве
Вы уже знаете, что Дед Мороз хранит запасы подарков в своих тайных хранилищах. Напомним, что хранилище состоит из ячеек, нумерация которых начинается с единицы. В каждой ячейке находится строго один подарок. Одинаковые подарки хранятся в идущих подряд ячейках. Подарки в хранилище отсортированы по алфавиту.
В одном из хранилищ имеется \(n\) ячеек. Ячейки объединяются в камеры хранения, по \(m\) ячеек в каждой. Камеры хранения нумеруются так же, как и ячейки, начиная с единицы. То есть ячейки с номерами с 1 по \(m\) находятся в первой камере, с \(m+1\) по \(2m\) — во второй камере, и так далее.
Вам дана информация о подарках, хранящихся во всех \(n\) ячейках данного хранилища. Напишите программу, определяющую номер камеры, в которой хранится каждый из \(k\) подарков из списка пожеланий одного школьника. Гарантируется, что все подарки из списка имеются в наличии в хранилище. Если подарок хранится сразу в нескольких соседних камерах, то требуется вывести номер первой из них.
Формат ввода
В первой строке вводятся натуральное число \(n\) — количество ячеек в рассматриваемом хранилище и натуральное число \(m\) — количество ячеек в камере хранения (\(1\leqslant n\leqslant 10^6\), \(2\leqslant m\leqslant 10^5\)).
В последующих \(n\) строках вводятся названия подарков, хранящихся в ячейках рассматриваемого хранилища (в порядке возрастания номеров ячеек), — слова, состоящие из строчных латинских букв.
Далее в отдельной строке вводится натуральное число \(k\) — количество подарков, указанных в пожеланиях школьника (\(1\leqslant k\leqslant 10^5\)).
В последующих \(k\) строках вводятся названия подарков из списка.
Формат вывода
Для каждого подарка из списка школьника программа должна вывести в отдельной строке одно натуральное число — номер камеры хранения, в которой находится указанный подарок.
Гарантируется, что все подарки из списка имеются в наличии в хранилище. Если подарок хранится сразу в нескольких соседних камерах, то требуется вывести номер первой из них.
| |
|
|
Морковки для снеговиков
Бинарный поиск
Бинарный поиск в массиве
У каждого уважающего себя снеговика должен быть нос из морковки. При этом снеговики в усадьбе Деда Мороза могут быть любой, даже самой большой высоты. Для того чтобы воткнуть морковку высоким снеговикам, в усадьбе имеется стремянка высоты \(h\) см. С её помощью можно воткнуть морковку любому снеговику высотой не более \(h\) см.
Снеговиков построили в ряд в порядке неубывания их роста и присвоили им номера, начиная с единицы. Напишите программу, определяющую номер последнего снеговика, которому удастся воткнуть нос-морковку.
Формат ввода
В первой строке на вход подаётся натуральное число \(n\) — количество снеговиков в усадьбе (\(1\leqslant n\leqslant 10^6\)).
В следующей строке вводится \(n\) натуральных чисел — значения роста снеговиков в том порядке, в котором они были построены в ряд (каждое число не превосходит \(10^9\)).
Затем следующей строкой вводится натуральное число \(k\) — количество рассматриваемых лестниц (\(1\leqslant k\leqslant 10^5\)).
В последней строке через пробел вводится \(k\) натуральных чисел, не превосходящих \(10^9\), — высоты рассматриваемых лестниц.
Формат вывода
Программа должна для каждого значения высоты лестницы вывести в отдельной строке ответ на задачу.
Если ни одному снеговику нельзя воткнуть нос-морковку с помощью лестницы указанной длины, то программа должна вывести значение 0.
| |
|
|
Программа полёта Деда Мороза
Бинарный поиск
Бинарный поиск в массиве
Словари
Одна из самых сложных и важных задач Деда Мороза в новогоднюю ночь — составление маршрута перемещения по городам России. Для этого он заранее измеряет расстояния от его усадьбы до каждого города (по прямой). Далее дедушка руководствуется следующим правилом. Пусть очередным пунктом маршрута является город, расстояние до которого от усадьбы равно \(x_i\) км. Тогда следующим пунктом маршрута станет город, находящийся от усадьбы на расстоянии \(x_j\) км, где значение \(\left|x_i-x_j\right|\) наименьшее. Если таких городов несколько, то будет выбран первый из них по алфавиту.
Напишите программу, определяющую по информации о городах, требующих посещения, и текущем городе следующий город маршрута.
Формат ввода
В первой строке вводится одно натуральное число \(n\) — количество ещё не посещённых городов (\(1\leqslant n\leqslant 10^6\)).
Далее в \(n\) строках вводятся названия этих городов и расстояния от них до усадьбы Деда Мороза (расстояния целые, положительные, не превосходят \(10^9\)). Гарантируется, что названия всех городов различны. Название города состоит строго только из латинских букв (все буквы строчные, кроме первой — она заглавная).
В следующей строке вводится натуральное число \(k\) — количество рассматриваемых случаев текущего местоположения Деда Мороза (\(1\leqslant k\leqslant 10^5\)).
В последней строке через пробел вводится \(k\) натуральных чисел, не превосходящих \(10^9\), — расстояния от усадьбы до возможных текущих городов.
Формат вывода
Для каждого возможного варианта текущего положения Деда Мороза выведите в отдельной строке название следующего города на маршруте новогоднего волшебника.
| |
|