| | | |
|
Acowdemia I
Использование сортировки
Беси учится на PhD в компьютерных науках. Она опубликовала N статей (1≤N≤105) и её i-ую статью цитировали ci раз (0≤ci≤105).
Беси слышала что академические успехи измеряются h-индексом. h-индекс - это наибольшее число h такое, что ученый имеет не менее h статей, каждая из которых цитируется не менее h раз. Например, учёный у которого четрые статьи с количествами цитат (1,100,2,3) имеет h-индекс равный 2, а ученый с количествами цитат (1,100,3,3) имеет h-индекс равный 3.
Чтобы повысить свой h-индекс Беси планирует написать обзорную статью, цитирующую некоторые из её прошлых статей. В связи с ограничением на количество страниц, она может включить не более L цитат в свой обзор (0≤L≤105), т конечно она может процитировать каждую из своих статей не более одного раза.
Помогите Беси определить максимальный h-индекс, который она может достичь написанием своей обзорной статьи.
Заметим, что научный руководитель должен был предупредить Беси, что написание статьи исключительно с целью увеличения своего h-индекса сомнительно с этической точки зрения.
ФОРМАТ ВВОДА
Первая строка ввода содержит N и L.
Вторая строка ввода содержит N разделённых одиночными пробелами целых чисел c1,…,cN.
ФОРМАТ ВЫВОДА
Максимальный h-индекс, который Беси может получить написанием обзорной статьи.
| № |
Входные данные |
Выходные данные |
Пояснение |
| 1 |
4 0
1 100 2 3 |
2 |
Беси не может цитировать свои статьи. Как указано ранее её h-индекс для (1,100,2,3) равен 2. |
| 2 |
4 1
1 100 2 3 |
3 |
Если Беси процитирует третью статью, её количества цитирований станут (1,100,3,3). Как отмечено ранее, h в этом случае равен 3.
|
| |
|
|
Маша и матрёшки
Использование сортировки
Маше на день рождения подарили набор матрёшек!
Теперь Маша сидит и вкладывает их одну в другую. Она заметила, что матрёшки отличаются по размеру, и одна помещается внутри другой, только если ее размеры строго меньше. Так, если есть две матрёшки i и j , а их размеры ai и aj соответственно, то матрёшка i вкладывается внутрь матрёшки j тогда и только тогда, когда ai < aj . Разумеется, непосредственно внутрь матрёшки можно вложить только одну другую матрёшку, иначе получится неаккуратно, а Маша — очень аккуратная девочка.
Маше особенно нравится, если она может, вкладывая матрёшки друг в друга, добиться того, что все они оказываются внутри одной самой большой матрёшки. Но, к сожалению, это не всегда возможно. Поэтому Маша решила убрать часть матрёшек в шкаф, оставив такой набор, чтобы их все можно было вложить друг в друга. Помогите Маше понять, какое максимальное количество матрёшек может быть в таком наборе.
Входные данные
В первой строке находится число n — количество матрёшек, подаренных Маше ( 1 ≤ n ≤ 1000 ). В следующей строке через пробел находятся n чисел — размеры матрёшек. Число ai , стоящее на месте i , задает размер матрёшки с номером i ( 1 ≤ ai ≤ 10 000 ).
Выходные данные
Выведите одно число — максимальное количество матрёшек, которые можно вложить друг в друга.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3
2 10 2 |
2 |
| 2 |
6
2 1 2 1 3 4 |
4 |
| 3 |
4
3 1 4 2 |
4 |
| |
|
|
Нужно больше конфет!
Одномерные массивы
Использование сортировки
У Карлсона дома есть набор из n банок с конфетами. Банки пронумерованы от 1 до n , в i -й из них лежит a i конфет. Карлсон считает набор банок симпатичным , если в этом наборе нет трех банок с разным числом конфет.
У Карлсона есть неограниченный запас конфет в карманах, поэтому он может добавить в любую банку произвольное число конфет. Помогите ему определить, какое минимальное общее число конфет ему придется добавить, чтобы набор банок с конфетами стал симпатичным.
Входные данные
Первая строка входных данных содержит натуральное число n ( 1 ≤ n ≤ 105 ) — количество банок в наборе Карлсона.
Вторая строка входных данных содержит n целых чисел ai ( 0 ≤ ai ≤ 109 ) — число конфет в банках. Соседние числа отделены друг от друга одним пробелом.
Выходные данные
Выведите одно число — минимальное общее количество конфет, которое придется добавить, чтобы Карлсон считал набор банок симпатичным.
Примечание
В первом тесте из примера Карлсон может добавить в первую банку две конфеты, а во вторую банку — одну конфету. Тогда в первой и четвертой банках будет лежать по 7 конфет, а во второй и третьей — по 2 конфеты.
Во втором тесте из примера набор банок исходно является симпатичным, добавлять конфеты не требуется.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4
5 1 2 7 |
3 |
| 2 |
3
1 1 1 |
0 |
| |
|
|
Минимальное число
Использование сортировки
Дано натуральное четырехзначное число. Найдите минимальное натуральное четырехзначное число, состоящее из тех же цифр, что и заданное. Заметим, что четырехзначные числа не могут начинаться с нуля.
Входные данные
Вводится натуральное четырехзначное число.
Выходные данные
Выведите минимальное натуральное четырехзначное число, состоящее из тех же цифр.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
1513 |
1135 |
| |
|
|
Сортировка точек
Структуры
Использование сортировки
Элементарная геометрия
Выведите все исходные точки в порядке возрастания их расстояний от начала координат.
Создайте структуру Point и сохраните исходные данные в массиве структур Point.
Входные данные
Программа получает на вход набор точек на плоскости. Сначала задано количество точек n, затем идет последовательность из n строк, каждая из которых содержит два числа: координаты точки. Величина n не превосходит 100, все исходные координаты – целые числа, не превосходящие 103.
Выходные данные
Необходимо вывести все исходные точки в порядке возрастания их расстояний от начала координат. Программа выводит только координаты точек, их количество выводить не надо.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
2
1 2
2 3 |
1 2
2 3 |
| |
|
|
Печаль Громозеки
Одномерные массивы
Использование сортировки
Алгоритмы сортировки
Громозека имеет последовательность целых чисел A длины N. Он свободно выбирает целое число b. Здесь ему станет грустно, если Ai и b+i находятся далеко друг от друга. Точнее, печаль Громозеки рассчитывается следующим образом:
\(abs(A_1-(b+1))+abs(A_2-(b+2))+...+abs(A_N-(b+N))\).
Здесь \(abs(x) \)- это функция, которая возвращает абсолютное значение x. Найдите минимально возможную печаль Громозеки.
Входные данные
В первой строке записано целое число N (\(1<=N<=2 \cdot 10^5\)). Во второй строке записано N целых чисел Ai (\(1<=A_i<=10^9\)).
Выходные данные
Выведите на экран минимально возможную печаль Громозеки.
Примеры
| № |
Входные данные |
Выходные данные |
Пояснение |
| 1 |
5
2 2 3 5 5 |
2 |
Если мы выберем b = 0, печаль Громозеки будет \(\)
abs (2- (0 + 1)) + abs (2-(0 + 2))+ abs (3-(0 + 3)) + abs (5- (0 + 4)) + abs(5-(0 + 5)) = 2.
Любой другой выбор b не делает печаль Громозеки меньше 2, поэтому ответ - 2. |
| 2 |
9
1 2 3 4 5 6 7 8 9 |
0 |
|
| 3 |
6
6 5 4 3 2 1 |
18 |
|
| 4 |
7
1 1 1 1 2 3 4 |
6 |
|
| |
|
|
Число
Использование сортировки
Алгоритмы на строках
Вася написал на длинной полоске бумаги большое число и решил похвастаться своему старшему брату Пете этим достижением. Но только он вышел из комнаты, чтобы позвать брата, как его сестра Катя вбежала в комнату и разрезала полоску бумаги на несколько частей. В результате на каждой части оказалось одна или несколько идущих подряд цифр.
Теперь Вася не может вспомнить, какое именно число он написал. Только помнит, что оно было очень большое. Чтобы утешить младшего брата, Петя решил выяснить, какое максимальное число могло быть написано на полоске бумаги перед разрезанием. Помогите ему!
Формат входных данных
Входные данные состоят из одной или более строк, каждая из которых содержит последовательность цифр. Количество строк не превышает 100, каждая строка содержит от 1 до 100 цифр. Гарантируется, что хотя бы в одной строке первая цифра отлична от нуля.
Последняя строка входного потока содержит число -1 - признак окончания данных.
Формат выходных данных
Выведите одну строку – максимальное число, которое могло быть написано на полоске перед разрезанием.
| |
|
|
Количество чисел с суммой не больше S
ЕГЭ_информатика
Использование сортировки
В файле записаны целые положительные числа. В первой строке файла записано число N - количество чисел, и натуральное число S. В следующих N строках записаны сами числа.
Укажите в ответе два числа через пробел: сначала максимальное количество чисел, которые необходимо сложить, чтобы сумма была не больше числа S, затем, значение полученной суммы.
| |
|
|
Замена чисел
Использование сортировки
ЕГЭ_информатика
В наборе чисел N замените одно число на число из набора чисел M таким образом, чтобы сумма чисел в наборе N была как можно ближе к числу S. Выведите три числа, каждое в отдельной строке:
1 строка - число, которое заменили из набора N;
2 строка - число из набора M, которым заменили;
3 строка - полученную сумму чисел из набора N.
Гарантируется, что такую замену сделать можно. Если возможных замен несколько, то выбрать ту, в которой число из набора N меньше.
Входные данные
В первой строке вводится через пробел 3 числа: n (10<=N<=105) - количество чисел в наборе N, m (10<=M<=105) - количество чисел в наборе M, S (10<=S<=109) S>sum(N), где sum(N) - сумма всех чисел набора N.
Во второй строке записан набор чисел N: n чисел, разделенных одним пробелом (каждое число по модулю не превышает 105).
Во третьей строке записан набор чисел M: m чисел, разделенных одним пробелом (каждое число по модулю не превышает 105).
Выходные данные
Выведите на экран ответ на задачу, как указано в условии.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
2 2 10
2 4
1 3 |
2
3
7 |
| |
|
|
Демо-2022. Разбор задачи
ЕГЭ_информатика
Использование сортировки
Системный администратор раз в неделю создаёт архив пользовательских файлов. Однако объём диска, куда он помещает архив, может быть меньше, чем суммарный объём архивируемых файлов. Известно, какой объём занимает файл каждого пользователя. По заданной информации об объёме файлов пользователей и свободном объёме на архивном диске определите максимальное число пользователей, чьи файлы можно сохранить в архиве, а также максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей. Напишите программу, которая вычисляет наибольшее число пользователей, чьи файлы могут быть помещены в архив, а также максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей.
Входные данные:
В первой строке находятся два числа: S – размер свободного места на диске (натуральное число, не превышающее 100 000) и N – количество пользователей (натуральное число, не превышающее 10000). В следующих N строках находятся значения объёмов файлов каждого пользователя (все числа натуральные, не превышающие 100), каждое в отдельной строке.
Выходные данные:
Выведите два числа в одной строке через пробел: сначала наибольшее число пользователей, чьи файлы могут быть помещены в архив, затем максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей.
Пример
| № |
Входные данные |
Выходные данные |
| 1 |
100 4
80
30
50
40 |
2 50 |
При таких исходных данных можно сохранить файлы максимум двух пользователей. Возможные объёмы этих двух файлов 30 и 40, 30 и 50 или 40 и 50. Наибольший объём файла из перечисленных пар – 50, поэтому ответ для приведённого примера: 2 50
| |
|
|
Бонус за результат. Тренировочное задание - 1
Использование сортировки
ЕГЭ_информатика
В quizzz "Сдай ЕГЭ на 100 баллов" можно набрать до 10 000 очков. По окончании игры, первые K участников, набравшие наибольшее количество баллов, получают бонус к своим очкам в виде +30% от набранных. Вам известна информация о том, сколько очков набрал каждый участник игры. Определите максимальное количество очков, на которое не распространился бонус, а также целую часть от общей суммы бонуса, полученную игроками.
Входные и выходные данные
В первой строке входного файла находятся два числа, записанные через пробел: N – общее количество игроков (натуральное число, не превышающее 10 000) и K – количество игроков, которые получают бонус. В следующих N строках находятся результаты каждого участника (количество набранных очков - все числа натуральные, не превышающие 10 000), каждое в отдельной строке.
Запишите в ответе два числа: сначала максимальное количество очков, на которое не распространился бонус, а затем целую часть от суммы всех надбавок.
Пример входного файла:
12 4
370
580
3000
1310
1700
2810
1660
1250
1870
1340
1400
1260
При таких исходных данных ответ должен содержать два числа – 1660 2814.
| |
|
|
Яркость гирлянды. Тренировочное задание - 2
Использование сортировки
ЕГЭ_информатика
На фабрике Деда Мороза изготавливаются лампочки различного веса и яркости. Вес лампочки не превосходит 100 грамм, яркость лампочки не превосходит 10000 люменов.
Для изготовления новогодней гирлянды выбираются K самых ярких лампочек. Если яркость у двух лампочек одинаковая и они все не помещаются в гирлянду, то помещают лампочку с меньшим весом.
Известна информация о весе и яркости каждой лампочки, завезенной в мастерскую для формирования новогодней гирлянды.
Определите суммарный вес лампочек в гирлянде и среднюю яркость всей гирлянды.
Входные и выходные данные
В файле в первой строке через пробел записаны числа N - количество лампочек, завезенный в мастерскую (натуральное число, не превышающее 1000) и K – количество лампочек в гирлянде (натуральное число, не превосходящее 100). В каждой из последующих N строк через пробел записаны два числа – вес и яркость каждой лампочки.
Запишите в ответе два числа – сначала суммарный вес лампочек в гирлянде, затем среднюю яркость всей гирлянды (только целую часть).
Пример организации исходных данных во входном файле:
9 4
50 600
60 480
45 540
30 300
15 180
70 560
30 360
91 910
40 320
Ответ: 256 652
| |
|
|
Суперстадион
ЕГЭ_информатика
Использование сортировки
ЕГЭ-26. Обработка массива целых чисел. Сортировка
На планете Блук находится самый большой суперстадион Галактики. На суперстадионе 10 000 рядов, пронумерованных начиная с 1. В каждом ряду 10 000 мест, пронумерованных начиная с 1. К текущему моменту, на концерт Суперзвезды продали N билетов. В файле указана информация о проданных билетах: номер ряда и номер места в данном ряду. Определите, в каком ряду больше всего свободных мест, находящихся рядом. Если таких мест одинаковое количество в нескольких рядах, то укажите минимальный номер ряда. А также укажите минимальный номер места, с которого начинаются такие свободные места.
Входные данные
Первая строка входного файла содержит целое число N – общее количество проданных билетов. Каждая из следующих N строк содержит 2 целых числа: номер ряда и номер места в данном ряду.
В ответе запишите два целых числа: номер ряда, в котором больше всего свободных мест, находящихся рядом, затем – минимальный номер места, с которого начинаются такие свободные места.
Пример организации исходных данных во входном файле (при 5 рядах и 5 местах в ряду):
17
1 2
2 3
2 4
3 1
3 2
4 1
4 2
4 3
5 1
5 5
5 4
5 2
5 3
3 4
3 5
4 5
1 5
Ответ: 1 3
Файл к заданию
| |
|
|
Гошина последовательность
ЕГЭ_информатика
Использование сортировки
ЕГЭ-26. Обработка массива целых чисел. Сортировка
Любитель математики Гоша придумал свою собственную последовательность. Правила в его последовательности следующие:
1) все числа в последовательности имеют свой номер;
2) первый элемент последовательности имеет номер 1;
3) каждое число в последовательности должно делится на свой номер;
4) число с большим номером, должно быть не меньше, чем число с меньшим номером.
Пример Гошиной последовательности: 1 4 6 8 10 18 21.
По заданному набору чисел определите какое максимальное количество чисел можно выбрать, чтобы составить Гошину последовательность, а также, какое максимальное число в ней может быть.
Входные данные
В первой строке входного файла содержится число N - количество чисел в файле. Далее идет N натуральных чисел (N <= 105), каждое - в отдельной строке.
Запишите в ответе: сначала максимальное количество чисел, которые можно выбрать, чтобы составить Гошину последовательность, затем - максимальное число, которое может быть в этой последовательности.
Пример входного файла:
12
25
17
20
15
6
9
10
12
5
3
4
1
Ответ: 5 25
Файл к заданию
| |
|
|
Закупка болтов и гаек - 04
ЕГЭ_информатика
Использование сортировки
Магазин производит закупку болтов (bolt), гаек (nut), гвоздей (pin), шайб (shim) и винтов (screw), на которую выделена определённая сумма денег. У метизного завода есть в наличии различные модификации этих изделий по розничной цене. При покупке менеджер руководствуется следующими правилами:
- Нужно купить как можно больше изделий, независимо от их типа и модификации.
- Если можно разными способами купить максимальное количество двух различных изделий, нужно выбрать тот способ, при котором будет куплено как можно больше болтов.
- Если можно разными способами купить максимальное количество изделий с одинаковым количеством других товаров, нужно выбрать тот способ, при котором вся покупка будет дешевле.
Определите, сколько всего будет куплено болтов и какая сумма останется неиспользованной.
Входные данные
Программа получает на вход несколько строк. В первой строке расположены два числа через пробел: N - общее количество болтов, гаек, гвоздей, шайб и винтов у метизного завода и M - сумма выделенных на закупку денег (в рублях). Каждая из следующих N строк содержит целое число (цена изделия в рублях) и тип изделия. Все данные в строках отделены одним пробелом.
Выходные данные
В ответе запишите два целых числа: сначала количество закупленных болтов, затем оставшуюся неиспользованной сумму денег. (в одной строке через один пробел)
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
6 1650
600 screw
750 bolt
750 shim
450 pin
300 nut
150 bolt |
2 0 |
| |
|
|
Закупка болтов и гаек - 01
ЕГЭ_информатика
Использование сортировки
Магазин производит закупку болтов (bolt) и гаек (nut), на которую выделена определённая сумма денег. У метизного завода есть в наличии различные модификации этих изделий по розничной цене. При покупке менеджер руководствуется следующими правилами:
- Нужно купить как можно больше изделий, независимо от их типа и модификации.
- Если можно разными способами купить максимальное количество изделий, нужно выбрать тот способ, при котором будет куплено как можно больше гаек.
- Если можно разными способами купить максимальное количество изделий с одинаковым количеством гаек, нужно выбрать тот способ, при котором вся покупка будет дешевле.
Определите, сколько всего будет куплено гаек и какая сумма останется неиспользованной.
Входные данные
Программа получает на вход несколько строк. В первой строке расположены два числа через пробел: N - общее количество болтов и гаек у метизного завода и M - сумма выделенных на закупку денег (в рублях). Каждая из следующих N строк содержит целое число (цена изделия в рублях) и тип изделия (bolt - болт, nut - гайка). Все данные в строках отделены одним пробелом.
Выходные данные
В ответе запишите два целых числа: сначала количество закупленных гаек, затем оставшуюся неиспользованной сумму денег.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
6 6500
1500 bolt
500 bolt
3500 nut
3000 nut
2500 bolt
1000 nut |
2 500 |
| |
|
|
Закупка болтов и гаек - 03
ЕГЭ_информатика
Использование сортировки
Магазин производит закупку болтов (bolt), гаек (nut), гвоздей (pin), шайб (shim) и винтов (screw), на которую выделена определённая сумма денег. У метизного завода есть в наличии различные модификации этих изделий по розничной цене. При покупке менеджер руководствуется следующими правилами:
- Нужно купить как можно больше изделий, независимо от их типа и модификации.
- Если можно разными способами купить максимальное количество двух различных изделий, нужно выбрать тот способ, при котором будет куплено как можно больше гаек.
- Если можно разными способами купить максимальное количество изделий с одинаковым количеством гаек, нужно выбрать тот способ, при котором вся покупка будет дешевле.
Определите, сколько всего будет куплено гаек и какая сумма останется неиспользованной.
Входные данные
Программа получает на вход несколько строк. В первой строке расположены два числа через пробел: N - общее количество болтов и гаек у метизного завода и M - сумма выделенных на закупку денег (в рублях). Каждая из следующих N строк содержит целое число (цена изделия в рублях) и тип изделия. Все данные в строках отделены одним пробелом.
Выходные данные
В ответе запишите два целых числа: сначала количество закупленных болтов, затем оставшуюся неиспользованной сумму денег. (в одной строке через один пробел)
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
6 1650
600 screw
750 bolt
750 nut
450 pin
300 nut
150 bolt |
2 0 |
| |
|
|
Закупка болтов и гаек - 02
ЕГЭ_информатика
Использование сортировки
Магазин производит закупку болтов (bolt) и гаек (nut), на которую выделена определённая сумма денег. У метизного завода есть в наличии различные модификации этих изделий по розничной цене. При покупке менеджер руководствуется следующими правилами:
- Нужно купить как можно больше изделий, независимо от их типа и модификации.
- Если можно разными способами купить максимальное количество изделий, нужно выбрать тот способ, при котором будет куплено как можно больше болтов.
- Если можно разными способами купить максимальное количество изделий с одинаковым количеством болтов, нужно выбрать тот способ, при котором вся покупка будет дешевле.
Определите, сколько всего будет куплено болтов и какая сумма останется неиспользованной.
Входные данные
Программа получает на вход несколько строк. В первой строке расположены два числа через пробел: N - общее количество болтов и гаек у метизного завода (1 <= N <= 105) и M - сумма выделенных на закупку денег (в рублях) (1 <= M <= 109). Каждая из следующих N строк содержит целое число (цена изделия в рублях) и тип изделия (bolt - болт, nut - гайка). Все данные в строках отделены одним пробелом.
Выходные данные
В ответе запишите два целых числа: сначала количество закупленных болтов, затем оставшуюся неиспользованной сумму денег. (в одной строке через один пробел)
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
6 6500
1500 nut
500 nut
3500 bolt
3000 bolt
2500 nut
1000 bolt |
2 500 |
| |
|
|
Гошина последовательность
Использование сортировки
ЕГЭ_информатика
Любитель математики Гоша придумал свою собственную последовательность. Правила в его последовательности следующие:
1) все числа в последовательности имеют свой номер;
2) первый элемент последовательности имеет номер 1;
3) каждое число в последовательности должно делится на свой номер;
4) число с большим номером, должно быть больше, чем число с меньшим номером.
Пример Гошиной последовательности: 1 4 6 8 10 18 21.
По заданному набору чисел определите какое максимальное количество чисел можно выбрать, чтобы составить Гошину последовательность, а также какое максимальное число в ней может быть.
Входные данные
В первой строке записано число N - количество чисел в файле (N <= 105). Далее идет N натуральных чисел (не больше 106), каждое - в отдельной строке.
Входные данные
Выведите два числа через пробел: сначала максимальное количество чисел, которые можно выбрать, чтобы составить Гошину последовательность, затем - максимальное число, которое может быть в этой последовательности.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
12
25
17
20
15
6
9
10
12
5
3
4
1 |
5 25 |
| |
|
|
Скупщик шоколада
Алгоритмы сортировки
Использование сортировки
Услышав, что шоколад полезен для мозга и нервной системы, ученик Василий решает купить M плиток шоколада. В городе есть N магазинов, которые продают различный шоколад. В i-м магазине Василий может купить не более Bi плиток шоколада по Ai рублей каждая. Помогите Василию определить, какую минимальную сумму денег ему необходимо накопить, чтобы купить M плиток шоколада?
Гарантируется, что располагая нужной суммой, Василий всегда сможет купить M плиток шоколада.
Входные данные
В первой строке заданы два числа: N и M (1 <= N, M <= 105). Следующие N строк содержат по 2 числа: Ai (1 <= Ai <= 109) и Bi (1 <= Вi <= 105). \(B_1 + B_2 +... + B_N >= M\).
Выходные данные
Выведите минимальную сумму денег, необходимую Василию для покупки M плиток шоколада.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
2 5
4 9
2 4 |
12 |
| 2 |
4 30
6 18
2 5
3 10
7 9 |
130 |
| 3 |
1 100000
1000000000 100000 |
100000000000000 |
| |
|
|
Ресторан
Динамическое программирование
Использование сортировки
Бинарный поиск в массиве
Ресторан получил 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 |
| |
|
|
Меняю конфеты на ноутбук
Одномерные массивы
Динамическое программирование
Использование сортировки
Порядковые статистики
Динамическое программирование: один параметр
Антон Б., суперспособный ученик 8 класса, обладает неудивительными математическими способностями. Побывав однажды на экскурсии в Колоколамске, он понял, что легко может написать программу, которая бы предсказывала стоимость его любимых конфет на любой промежуток дней вперед.
Используя эту программу, Антон Б. решил приобрести на все свои карманные деньги конфеты (а их у него было всего 10 рублей), затем, чуть позже, продать все купленные им конфеты. Таким образом, Антон Б. хочет заработать как можно больше денег на новый ноутбук.
Так как Антон Б. еще несовершеннолетний и один ездить в другие города не может, ему нужно понять, в какие из двух дней попросить старшего брата отвезти его в Колоколамск. Старший брат совершеннолетний и очень любит своего младшего брата, поэтому всегда готов ему помочь.
Так как Антон Б. очень торопится на кружок по информатике, он просит вас определить эти два дня в ближайшие N дней.
Входные данные
В первой строке записано число N (2 <= N <= 100000) количество дней, на которые Антон Б. делает прогноз. Вторая строка содержит N целых положительных чисел ai (1 <= i <= N , 1 <= ai <= 5000 ), где ai - предсказанная стоимость конфет в i-й день.
Выходные данные
Выведите два числа: первое число - номер дня, в который Антон Б. поедет покупать конфеты, второе - номер дня, в который он поедет продавать конфеты. В случае, если таких вариантов дней несколько, выведите любой из них. Если Антон Б. в итоге не сможет получить прибыль ни при каких вариантах, то выведите два нуля.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
6
10 3 5 3 11 9
|
2 5
|
| 2 |
4
5 5 5 5
|
0 0
|
| |
|
|
Радостная фигура
Использование сортировки
Жадный алгоритм
Маленький Миша любит играть счетными палочками. Счетные палочки он берет у своей сестры первоклассницы. Так как он редко возвращает их назад, маме приходится часто покупать новые палочки. Поэтому не все палочки у Миши одинаковые, но все палочки имеют целочисленную длину.
Сегодня Миша строит из палочек следующую фигуру. Он начал из угла комнаты. Мы с вами обозначим, условно, этот угол координатой (0, 0). Дальше Миша выкладывает палочку параллельно одной из двух стен, исходящей из данного угла. Будем считать, что стены ровные и образуют друг с другом в точке (0, 0) угол 90 градусов. При этом, Миша никогда не выкладывает две подряд палочки одновременно параллельно одной и той же стене (другими словами, он всегда чередует направление палочек).
Миша, хоть и маленький и не знает геометрии, но все же всегда радуется, если конец его фигуры находится как можно дальше от стартового угла. Помогите Мише выложить фигуру, которая его обрадует. Любые две палочки, которые выкладывает Миша всегда имеют минимум одну точку касания или пересечения.
Входные данные
Программа получает на вход несколько строк. Первая строка содержит целое число n (1<= n <= 100000) — количество палочек, которые есть у Миши. Вторая строка содержит n целых чисел a1,...,an (1 <= ai <= 10000) - длины Мишиных палочек.
Выходные данные
Выведите одно целое число — квадрат максимального расстояния от угла с координатой (0,0) до конечной точки фигуры, которую построил Миша.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3
1 2 3 |
26 |
| 2 |
4
1 1 2 2 |
20 |
| |
|
|
Мишины кубики
Использование сортировки
Жадный алгоритм
Задача на реализацию
Простые задачи на перебор
"Два указателя"
У маленького Миши есть кубики, на каждом из которых написана одна английская строчная буква. Вчера он выкладывал кубики в два ряда. В первом ряду у Миши n кубиков с буквами, во втором - m кубиков с буквами. Так получилось, что в двух этих рядах нет совпадающих букв. Другими словами, ни одна буква не содержится одновременно в обоих рядах.
Сегодня маленький Миша решил продолжить играть с кубиками. Но теперь он берет один любой кубик из какого-либо ряда и составляет из них третий ряд, добавляя кубик всегда в конец. Маленький Миша никогда не берет более k кубиков подряд из одного и того же ряда. Миша закончил играть тогда, когда у него закончились кубики в каком-то одном ряду (в первом или во втором).
Наблюдавший за игрой папа заметил, что играя таким образом у Миши получилась лексикографически наименьшая строка. По известным двум строкам, которые образуются путем прочтения букв первого и второго ряда и числу k определите строку, которую получил маленький Миша.
Строка x лексикографически меньше строки y только и только тогда, когда выполняется одно из следующих условий:
- x является префиксом y, но x != y;
- в первой позиции, где x и y различаются, в строке x находится буква, которая стоит в алфавите раньше, чем соответствующая буква y.
Входные данные
Программа получает на вход несколько строк. В первой строке записаны три числа: n - количество кубиков в первом ряду, m - количество кубиков во втором ряду, k - целое число(1 <= n, m, k <= 100). Во второй строке записана строка a длиной n - строка, образованная прочтением букв, написанных на кубиках первого ряда. В третьей строке - строка b длиной m - строка, образованная прочтением букв, написанных на кубиках второго ряда.
Выходные данные
Выведите ответ на задачу.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
6 4 2
aaaaaa
bbbb |
aabaabaa |
| |
|
|
Раскраска отрезков
Сканирующая прямая
Использование сортировки
У Джона Доу есть n отрезков на прямой. Отрезок (a, b) (a < b) — это множество точек x, таких, что a < x < b. Говорят, что отрезки (a1, b1) и (a2, b2) пересекаются, если существует такая точка c, что a1 < c < b1 и a2 < c < b2.
Джон хочет покрасить каждый отрезок в чёрный или белый цвет так, чтобы никакие два отрезка одного цвета не пересекались. Он хочет узнать, сколько существует различных способов покрасить отрезки таким образом.
Две покраски считаются различными, если существует отрезок, который в одной покраске покрашен в белый цвет, а в другой — в чёрный.
Пусть количество способов покрасить отрезки равно x. Выведите остаток от деления x на 106 + 3.
Входные данные
В первой строке записано целое число n (1 ≤ n ≤ 105) — количество отрезков у Джона. В следующих n строках находится описание отрезков. В i-й из них записано два числа li и ri (0 ≤ li < ri ≤ 109) — координаты концов i-го отрезка.
Выходные данные
Выведите остаток от деления x (количество способов покрасить отрезки) на 106 + 3.
Примеры тестов
Входные данные
Входные данные
3
1 2
1 3
1 4
Входные данные
4
1 2
2 3
3 4
4 5
Примечание
Тесты поделены на группы, но оцениваются отдельно.
- n ≤ 3 — 10 баллов
- n ≤ 15 — 30 баллов
- n ≤ 100 — 20 баллов
- ai ≤ 106 — 20 баллов
- Без дополнительных ограничений — 20 баллов
| |
|
|
ПИРАМИДА
Использование сортировки
Для строительства двухмерной пирамиды используются прямоугольные блоки, каждый из которых характеризуется шириной и высотой. Можно поставить один блок на другой, только если ширина верхнего блока строго меньше ширины нижнего. Самым нижним в пирамиде может быть блок любой ширины.
По заданному набору блоков требуется определить, пирамиду какой наибольшей высоты можно построить из них.
Формат входных данных
В первой строке входных данных задается число N – количество блоков ( 1 <= N <= 100000 ). В следующих N строках задаются пары целых чисел wi и hi ( 1<= wi , hi <= 109), разделенные пробелом – ширина и высота блока, соответственно.
Формат выходных данных
Целое число – максимальная высота пирамиды.
| Ввод |
Вывод |
3
3 1
2 2
3 3 |
5 |
Замечание.
В приведенном примере пирамида будет состоять из двух блоков: нижним будет блок с номером 3, а верхним – блок с номером 2. Блок с номером 1 нельзя использовать для строительства пирамиды, т.к. его ширина совпадает с шириной нижнего блока.
| |
|
|
Пираты!
Использование сортировки
Использование сортировки
Использование сортировки
Двумерные массивы
В настолькой игре "Пираты!" задача одного из игроков состоит в том, чтобы провести торговый корабль с ценным грузом через море, на островах которого базируются пираты.
Поле представляют собой прямоугольник, состоящий из квадратных клеток. Игрок может за один ход перейти в одну из четырех соседних по стороне клеток, не выходя при этом за пределы поля. Торговый корабль начинает свой путь в любой клетке самого левого столбца и должен попасть в любую клетку самого правого столбца игрового поля.
Пиратские базы расположены на островах, которые также занимают одну клетку игрового поля, их расположение известно.
Вася выяснил, что чем больше расстояние от пиратской базы, тем безопаснее маршрут. расстояние считается как количество ходов по клеткам от пиратских баз до каждой из клеток маршрута.
Помогите ему определить, на какое минимальное расстояние придјтся подойти к пиратской базе, двигаясь по самому безопасному маршруту.
Формат входных данных
В первой строке записано натуральные числа N и M (1 <= N, M <= 1 000 000) количество строк и столбцов на игровом поле.
Во второй строке записано натуральное число K (1 <= K <= 500) количество пиратских баз.
В следующих K строках записаны пары чисел Ri , Ci (1 <= Ri <= N, 1 <= Ci <= M) координаты пиратских баз (строка, столбец).
Формат выходных данных
Выведите одно число минимальное расстояние, на которое придется приближаться к пиратской базе на самом безопасном маршруте.
Система оценки
Решения, верно работающие при N, M 6<=500, будут набирать не менее половины баллов.
| Ввод |
Вывод |
10 10
4
2 2
5 3
5 9
8 8 |
3 |
Замечание
Пример одного из безопасных маршрутов показан на рисун ке. Пиратские базы обозначены чјрным, клетки маршрута серым. Минимальное расстояние от пиратской базы до маршрута 3 хода.

| |
|
|
Пираты!
Использование сортировки
Использование сортировки
Использование сортировки
Двумерные массивы
В настолькой игре "Пираты!" задача одного из игроков состоит в том, чтобы провести торговый корабль с ценным грузом через море, на островах которого базируются пираты.
Поле представляют собой прямоугольник, состоящий из квадратных клеток. Игрок может за один ход перейти в одну из четырех соседних по стороне клеток, не выходя при этом за пределы поля. Торговый корабль начинает свой путь в любой клетке самого левого столбца и должен попасть в любую клетку самого правого столбца игрового поля.
Пиратские базы расположены на островах, которые также занимают одну клетку игрового поля, их расположение известно.
Вася выяснил, что чем больше расстояние от пиратской базы, тем безопаснее маршрут. расстояние считается как количество ходов по клеткам от пиратских баз до каждой из клеток маршрута.
Помогите ему определить, на какое минимальное расстояние придјтся подойти к пиратской базе, двигаясь по самому безопасному маршруту.
Формат входных данных
В первой строке записано натуральные числа N и M (1 <= N, M <= 1 000 000) количество строк и столбцов на игровом поле.
Во второй строке записано натуральное число K (1 <= K <= 500) количество пиратских баз.
В следующих K строках записаны пары чисел Ri , Ci (1 <= Ri <= N, 1 <= Ci <= M) координаты пиратских баз (строка, столбец).
Формат выходных данных
Выведите одно число минимальное расстояние, на которое придется приближаться к пиратской базе на самом безопасном маршруте.
Система оценки
Решения, верно работающие при N, M 6<=500, будут набирать не менее половины баллов.
| Ввод |
Вывод |
10 10
4
2 2
5 3
5 9
8 8 |
3 |
Замечание
Пример одного из безопасных маршрутов показан на рисун ке. Пиратские базы обозначены чјрным, клетки маршрута серым. Минимальное расстояние от пиратской базы до маршрута 3 хода.

| |
|
|
Пираты!
Использование сортировки
Использование сортировки
Использование сортировки
Двумерные массивы
В настолькой игре "Пираты!" задача одного из игроков состоит в том, чтобы провести торговый корабль с ценным грузом через море, на островах которого базируются пираты.
Поле представляют собой прямоугольник, состоящий из квадратных клеток. Игрок может за один ход перейти в одну из четырех соседних по стороне клеток, не выходя при этом за пределы поля. Торговый корабль начинает свой путь в любой клетке самого левого столбца и должен попасть в любую клетку самого правого столбца игрового поля.
Пиратские базы расположены на островах, которые также занимают одну клетку игрового поля, их расположение известно.
Вася выяснил, что чем больше расстояние от пиратской базы, тем безопаснее маршрут. расстояние считается как количество ходов по клеткам от пиратских баз до каждой из клеток маршрута.
Помогите ему определить, на какое минимальное расстояние придјтся подойти к пиратской базе, двигаясь по самому безопасному маршруту.
Формат входных данных
В первой строке записано натуральные числа N и M (1 <= N, M <= 1 000 000) количество строк и столбцов на игровом поле.
Во второй строке записано натуральное число K (1 <= K <= 500) количество пиратских баз.
В следующих K строках записаны пары чисел Ri , Ci (1 <= Ri <= N, 1 <= Ci <= M) координаты пиратских баз (строка, столбец).
Формат выходных данных
Выведите одно число минимальное расстояние, на которое придется приближаться к пиратской базе на самом безопасном маршруте.
Система оценки
Решения, верно работающие при N, M 6<=500, будут набирать не менее половины баллов.
| Ввод |
Вывод |
10 10
4
2 2
5 3
5 9
8 8 |
3 |
Замечание
Пример одного из безопасных маршрутов показан на рисун ке. Пиратские базы обозначены чјрным, клетки маршрута серым. Минимальное расстояние от пиратской базы до маршрута 3 хода.

| |
|
|
Детские подарки
Использование сортировки
Вы замечательный родитель и хотите подарить детям подарки. Но, чтобы не избаловать своих детей, вы должны дать каждому ребенку не более одного подарка.
Каждый ребенок i имеет уровень ожидания равный g[i] - целое число, показывающее минимальный размер подарка, получив который ребенок обрадуется. Каждый подарок j имеет размер s[j].
Посчитайте, какое максимальное количество детей вы сможете обрадовать.
Входные данные
Первая строка содержит целое число n - количество детей. Вторая строка содержит n целых чисел g[i] - уровень ожидания i-го ребенка. В третьей строке записано число m - количество подарков. Четвертая строка содержит m целых чисел s[j] - размер j-го подарка.
Ограничения
1 <= n <= 3 * 104
0 <= m <= 3 * 104
1 <= g[i], s[j] <= 231 - 1
Выходные данные
Выведите одно число. Ответ на задачу
Пояснения к примерам
1. В первом примере у вас есть 3 ребенка и 2 подарка. Уровни ожидания детей равны 1, 2, 3, соответственно. Имея 2 подарка размером 1, вы можете обрадовать только того ребенка, чей уровень ожидания равен 1.
Количество таких детей равно одному. Ответ 1.
2. Во втором примере у вас есть 2 ребенка и 3 подарка. Уровни ожидания детей равны 1, 2, соответственно. 3 подарка имеют достаточно большие размеры, чтобы обрадовать всех детей. Ответ 2.
| |
|
|
Вечер кёрлинга
Жадный алгоритм
Использование сортировки
Сегодня вечером по телевизору на разных каналах будут показывать n матчей по кёрлингу, причём i-й матч начинается в момент времени li и заканчивается в момент времени ri.
Василиса хочет посмотреть как можно больше матчей от начала до конца. При этом если какой-то матч заканчивается в момент времени ri, то она может после него посмотреть любой матч j, который начинается не раньше момента времени ri, то есть lj > ri (Василиса может моментально переключить каналы в момент окончания матча и начать смотреть новый матч). Также она хочет сделать перерыв длины хотя бы t между какими-то двумя играми, чтобы поужинать, то есть должны найтись два последовательных матча i и j, которые просмотрит Василиса, удовлетворяющие условию lj - ri => t. Перерыв не может быть до или после всех просмотренных игр.
Помогите Василисе составить набор, содержащий максимальное количество матчей, которые она сможет просмотреть полностью и при этом сделать перерыв продолжительностью не менее t между какими-то матчами, или определите, что такого набора не существует.
Формат входных данных
Первая строка входных данных содержит число n (2 ≤ n ≤ 100 000) - количество показываемых матчей.
Вторая строка входных данных содержит число t (1 ≤ n ≤ 109) - минимальная длина перерыва, который должна сделать Василиса.
В следующих n строках содержится по два числа li и ri ( 1 ≤ li < ri ≤ 109) - начало и конец i-го матча.
Формат выходных данных
Программа должна вывести число m - максимально возможное количество матчей, которые просмотрит Василиса. Во второй строке выведите m чисел через пробел - номера матчей, которые должна посмотреть Василиса, в порядке просмотра.
Если Василиса не может составить расписание хотя бы из двух матчей так, чтобы между какими-то двумя матчами был перерыв хотя бы t, то выведите число -1.
Замечание
В первом примере ответом будет последовательность матчей 6, 3, 5. Василиса сначала посмотрит матч 6,
который заканчивается в момент времени 4, потом переключится на матч 3, который продолжается с 4 до 6.
Затем она сделает перерыв с 6 по 10, после чего просмотрит матч номер 5 с 10 до 12. Получилось расписание из 3 матчей с перерывом, продолжительность которого равна 4. Заметим, что в данном примере правильным ответом также будет последовательность матчей 6, 4, 5, в этом случае продолжительность перерыва между матчами 4 и 5 будет равна 3.
Во втором примере всего два матча, первый заканчивается в 5, а второй начинается в 9, то есть составить расписание, в котором был бы перерыв продолжительностью не менее t=5, нельзя.
| |
|
|
Ноутбук за печеньки
Одномерные массивы
Динамическое программирование
Использование сортировки
Порядковые статистики
Динамическое программирование: один параметр
Летовец обладает неудивительными математическими способностями. Его способности на столько велики, что он легко может просчитать стоимость его любимых печенек, которые продаются на другом конце города. К сожалению, Летовец не может по максимуму воспользоваться всеми своими способностями, потому что вчера у него сломался ноутбук и теперь он не может писать программы.
Чтобы купить себе новый ноутбук, Летовец решил потратить все свои карманные деньги (а это всего лишь 10 рублей) на покупку своих любимых печенек, а чуть позже, продать все купленные им печеньки.
Так как Летовец еще несовершеннолетний и один ездить на другой конец города не может, ему нужно понять, в какие из двух дней попросить маму отвезти его на другой конец города. Мама всегда готова ему помочь.
Отсутствие ноутбука очень угнетает юного Летовца, поэтому он просит вас определить эти два дня в ближайшие N дней.
Формат входных данных
В первой строке записано число N (2 <= N <= 100000) количество дней, на которые Летовец делает прогноз. Вторая строка содержит N целых положительных чисел ai (1 <= i <= N , 1 <= ai <= 5000 ), где ai - предсказанная стоимость печенек в i-й день.
Формат выходных данных
Выведите два числа: первое число - номер дня, в который Летовей поедет покупать печеньки, второе - номер дня, в который он поедет продавать печеньки. В случае, если таких вариантов дней несколько, выведите любой из них. Если Летовец в итоге не сможет получить прибыль ни при каких вариантах, то выведите два нуля.
| |
|
|
Минимизируем число
Использование сортировки
У Незнайки есть одно натуральное четырехзначное число. Он решил подарить его Гуньке. Но, так как Гунька любит минимальные числа, Незнайке нужно составить из цифр его числа новое число, чтобы оно было как можно меньше. Помогите Незнайке составить из цифр его числа новое число, чтобы оно было минимальным.
Заметим, что четырехзначные числа не могут начинаться с нуля.
Формат входных данных
Вводится натуральное четырехзначное число.
Формат выходных данных
Выведите минимальное натуральное четырехзначное число, состоящее из тех же цифр.
| |
|
|
Такси
Использование сортировки
Наши люди до метро на такси не ездят!
После затянувшегося совещания директор фирмы решил заказать такси, чтобы развезти сотрудников по домам. Он заказал N машин — ровно столько, сколько у него сотрудников. Однако когда они подъехали, оказалось, что у каждого водителя такси свой тариф за 1 километр.
Директор знает, какому сотруднику сколько километров от работы до дома (к сожалению, все сотрудники живут в разных направлениях, поэтому нельзя отправить двух сотрудников на одной машине). Теперь директор хочет определить, какой из сотрудников на каком такси должен поехать домой, чтобы суммарные затраты на такси (а их несет фирма) были минимальны.
Формат входных данных
Сначала во входном файле записано натуральное число N (1 ≤ N ≤ 1000) — количество сотрудников компании (совпадающее с количеством вызванных машин такси). Далее записано N чисел, задающих расстояния в километрах от работы до домов сотрудников компании (первое число — для первого сотрудника, второе — для второго и т.д.). Все расстояния — положительные целые числа, не превышающие 1000. Далее записано еще N чисел — тарифы за проезд одного километра в такси (первое число — в первой машине такси, второе — во второй и т.д.). Тарифы выражаются положительными целыми числами, не превышающими 10000.
Формат входных данных
В выходной файл выведите N чисел. Первое число — номер такси, в которое должен сесть первый сотрудник, второе число — номер такси, в которое должен сесть второй и т.д., чтобы суммарные затраты на такси были минимальны. Если вариантов рассадки сотрудников, при которых затраты минимальны, несколько, выведите любой из них.
| |
|
|
Обувной магазин
Квадратичные сортировки
Использование сортировки
В обувном магазине продается обувь разного размера. Известно, что одну пару обуви можно надеть на другую, если она хотя бы на три размера больше. В магазин пришел покупатель. Требуется определить, какое наибольшее количество пар обуви сможет предложить ему продавец так, чтобы он смог надеть их все одновременно?
Формат входных данных
Сначала вводится размер ноги покупателя (обувь меньшего размера он надеть не сможет), затем количество пар обуви в магазине и размер каждой пары. Размер — натуральное число, не превосходящее 100, количество пар обуви в магазине - неотрицательное число, не превосходит 1000.
Формат выходных данных
Выведите единственное число — максимальное количество пар обуви.
| |
|
|
Наибольший отрезок, не содержащий точек
Квадратичные сортировки
Использование сортировки
На числовой прямой отмечено N точек с целочисленными координатами. Определите наибольшую длину отрезка, внутри которого нет ни одной точки.
Формат входных данных
В первой строке записано натуральное число N - количество отмеченных точек (2 <= N <= 103). Во второй строке записано N целых чисел - координаты точек (каждое число по модулю не больше 109).
Формат выходных данных
В первой строке выведите максимальную длину искомого отрезка. Во второй строке выведите координаты его концов (сначала левую координату, затем через пробел правую). Если таких отрезков несколько, то выведите тот отрезок, у которого наименьшая левая координата.
| |
|
|
Лифт
Задача на реализацию
Сортировка событий
Использование сортировки
Множества
Структуры данных
В современном многоэтажном офисе крупной компании установлен новый лифт. В
компании работает n сотрудников. Для проверки эффективности системы управления
лифтом требуется провести моделирование его работы в конце рабочего дня, когда все
сотрудники должны покинуть здание и спуститься на первый этаж.
В здании m этажей, пронумерованных от 1 до m снизу-вверх. Известно, что i-й
сотрудник подходит к лифту в секунду ti на этаже ai, чтобы спуститься на первый этаж.
На каждом этаже могут находиться люди, ожидающие лифт. Когда очередной
сотрудник подходит к лифту, он вызывает лифт, если на этом этаже лифт еще не вызван,
либо присоединяется к ожидающим лифт. Таким образом, помимо вызвавшего лифт, вместе
с ним лифт могут ожидать и другие сотрудники.
В каждый момент времени не более одного вызова является активным.
Изначально лифт свободен и находится на первом этаже. Когда поступает первый
вызов, этот вызов становится активным и лифт отправляется на соответствующий этаж. Если
несколько вызовов поступает одновременно, активным становится вызов от сотрудника с
меньшим номером.
Лифт перемещается между этажами со скоростью один этаж в секунду. Когда лифт
оказывается на этаже, откуда был сделан активный вызов, в него заходят все, кто уже
ожидает лифт на этом этаже, и лифт отправляется вниз на первый этаж, со скоростью один
этаж в секунду.
При движении вниз лифт останавливается на тех этажах, в которых был сделан вызов
на момент проезда лифта мимо этого этажа. Все ожидающие лифт сотрудники заходят в него
и вызов на этом этаже сбрасывается. Когда лифт завершает движение на первом этаже, все
люди выходят из лифта, а лифт ожидает следующего вызова.
Если в момент, когда лифт освободился, есть хотя бы один необслуженный вызов,
активируется вызов, который поступил раньше других. Если несколько вызовов поступило
одновременно, активируется вызов от сотрудника с меньшим номером. Лифт продолжает
обслуживание описанным образом, пока все n сотрудников не окажутся на первом этаже.
Будем считать, что люди входят и выходят из лифта мгновенно. Каждую секунду
сначала люди подходят и вызывают лифт, а затем выполняются соответствующие действия
(лифт перемещается на соседний этаж, в него входят или из него выходят люди, принимается
решение, на какой вызов лифт должен отреагировать).
Требуется написать программу, которая по описанию вызовов лифта для каждого
сотрудника определяет, в какой момент этот сотрудник окажется на первом этаже.
Формат входных данных
Первая строка входных данных содержит целые числа n и m — количество людей,
вызывающих лифт, и количество этажей в здании (1 ≤ n ≤ 105, 2 ≤ m ≤ 109).
Следующие n строк описывают сотрудников, i-я из этих строк содержит два целых
числа ti и ai — секунду, в которую i-й сотрудник подходит к лифту, и номер этажа, на
котором это происходит (1 ≤ t1 ≤ t2 ≤ … ≤ tn ≤ 109, 2 ≤ ai ≤ m)
Формат выходных данных
Выходные данные должны содержать n целых чисел, для каждого сотрудника
требуется вывести секунду, в которую он выйдет из лифта на первом этаже.
| Ввод |
Вывод |
|
5 4
2 3
2 4
5 2
5 3
9 3
|
6
12
6
12
12
|
Пояснение к примеру
Пример работы лифта по шагам показан в следующей таблице.
Использованные в пояснении к примеру обозначения

| |
|
|
Чтение книг
Бинарный поиск по ответу
Жадный алгоритм
Использование сортировки
У Максима есть n книг различных жанров. В i-й книге ai страниц. Сегодня он хочет прочитать не менее xj страниц, при этом, чтобы не запутаться в историях, он хочет прочитать как можно меньше книг.
Помогите Максиму определить минимальное количество книг, которые он должен прочитать, чтобы общее число прочитанных страниц было не менее xj. Если это невозможно, выведите -1. Максим не может читать одну и ту же книгу дважды.
Формат входных данных
Первая строка содержит натуральное число n (1 ≤ 𝑛 ≤ 105) - количество книг, которые есть у Максима. Вторая строка содержит n целых чисел a1, a2, ..., an (1≤ ai ≤104) - количество страниц в i-й книге. Третья строка содержит натуральное число xj (1 ≤ xj ≤ 2⋅109) - количество страниц, которое хочет прочитать Максим.
Формат выходных данных
Выведите ответ на задачу.
| |
|
|
Спортивная акция
Использование сортировки
Организаторы спортивных соревнований закупают товары для награждения в спортивном магазине. В магазине проходит акция. На K товаров с самой высокой ценой установлена скидка. Организаторы не хотят дарить товары, купленные по акции.
Ваша задача - помочь организаторам спланировать бюджет и определить цену самого дорогого товара, который не попадает под акцию.
Входные данные
В первой строке вводят два числа, записанные через пробел: N – общее количество товаров (натуральное число, не превышающее 100 000) и K – количество товаров (1 < K < N). В следующих N строках находятся значения цены каждого из товаров (все числа натуральные, не превышающие 10 000), каждое в отдельной строке.
Выходные данные
Выведите одно число - ответ на задачу.
| |
|
|
Спортивная акция - 2
Использование сортировки
В магазине спортивных товаров проходит акция. На K товаров с самой высокой ценой установлена скидка в размере d%. Причем, от каждой цены, после применения скидки, отбрасываются копейки. Администрация магазина хочет узнать, какую сумму они получат от продажи всех товаров по акции.
Входные данные
В первой строке вводят три числа, записанные через пробел: N – общее количество товаров (натуральное число, не превышающее 100 000), K – количество товаров (1 < K < N), d - размер скидки в процентах (5 < d < 50). В следующих N строках находятся значения цены каждого из товаров (все числа натуральные, не превышающие 10 000), каждое в отдельной строке. Гарантируется, что ответ не превышает 109.
Выходные данные
Выведите одно число - ответ на задачу.
Примечание
Стоимость товара со скидкой выисляется по следующей формуле:
Цена со скидкой = Исходная цена - Исходная цена * (Процент скидки / 100).
| |
|
|
Радиация
Использование сортировки
Космический аппарат "Звезда" выполняет задачу по фиксации показаний уровня космической радиации. Каждое показание записывается в виде целого числа. В процессе первоначальной обработки данных, для устранения потенциально неточных результатов, убирают из списка K наибольших и K наименьших показаний.
Исходя из списка полученных показаний и количестве исключаемых показаний, определите самое высокое точное показание и целую часть среднего арифметического всех точных показаний.
Формат входных данных
В первой строке записаны два числа через пробел: N – общее количество показаний (натуральное число, не превышающее 10 000) и K – количество исключаемых минимальных и максимальных показаний. В следующих N строках находятся значений каждого показания (все числа натуральные, не превышающие 10000), каждое в отдельной строке.
Формат выходных данных
Запишите в ответе два числа: сначала наибольшего точного показания, а затем целую часть среднего арифметического всех точных показаний.
| |
|
|
Курьер
Использование сортировки
Жадный алгоритм
Курьеру Васе поручили доставить n посылок. Вася начинает работать в первый день и каждый день может доставить ровно одну посылку. Про каждую посылку известен последний день, когда ее можно доставить di, и штраф wi, который придется заплатить, если посылка не будет доставлена в срок.
Помогите Васе решить, в каком порядке доставлять посылки, чтобы суммарный штраф был как можно меньше.
Например, если есть 3 посылки, первую необходимо доставить в первый день и штраф за опоздание 2, вторую также необходимо доставку в первый день и штраф за опоздание 3, а третью необходимо доставить не позже третьего дня и штраф за опоздание 1, то оптимально доставить сначала вторую, потом третью, а затем первую посылку. В этом случае не в срок доставлена только первая посылка и штраф составляет 2. Доставить одновременно первую и вторую посылку в срок невозможно.
Формат ввода
Формат вывода
В первой строке выведите единственное число, равное минимально возможному суммарному штрафу. Во второй строке через пробел выведите n чисел, где i-е число — день, в который необходимо доставить i-ю посылку.
Если возможно несколько оптимальных расписаний, выведите любое из них.
Пример
| Ввод |
Вывод |
3
1 2
1 3
3 1
|
2
3 1 2
|
| |
|
|
День рождения
Использование сортировки
У ковбоя Влада день рождения! На праздник собрались n детей. Чтобы поздравить ковбоя, дети решили водить вокруг Влада хоровод. Среди детей, пришедших к Владу, есть и высокие, и низкие, поэтому если они встанут в хороводе как угодно, многим из них может быть неудобно, потому что если в хороводе рядом стоят очень высокий и очень низкий ребёнок, им трудно держаться за руки. Поэтому дети решили встать в хоровод так, чтобы максимальная разность ростов двух соседних детей была минимальной.
Более формально, пусть n детей выстроились в хоровод. Пронумеруем их целыми числами от 1 до n так, чтобы справа от ребёнка с номером i стоял ребёнок с номером i+1, а справа от ребёнка с номером n стоял ребёнок с номером 1. Тогда неудобством этого хоровода назовём максимальную разность между ростом детей, которые стоят рядом. Обратите внимание, что разностью в росте двух детей называется разность между ростом более высокого и более низкого ребёнка, таким образом, разность в росте двух детей всегда неотрицательна.
Помогите детям и определите, в каком порядке им надо выстроиться в круг, чтобы минимизировать неудобство получившегося хоровода. Обратите внимание, что все n детей должны оказаться в хороводе.
Входные данные
В первой строке содержится одно целое число n (2 ≤ n≤ 105) — количество детей, которые пришли на день рождения ковбоя Влада.
Во второй строке заданы n целых чисел ai (1≤ai≤109) — рост каждого из детей. Рост детей задан в нанометрах и уменьшен на 109, таким образом, рост ребёнка с ai=1 чуть выше метра, а рост ребёнка с ai=109 составляет два метра.
Выходные данные
Выведите n целых чисел — значения роста детей в порядке, в котором они должны встать в хоровод. В этом порядке соседними будут дети с номерами i и i+1, а также дети с номерами 1 и n. Если оптимальных хороводов несколько, то выведите любой из них.
Примеры
| № |
Входные данные |
Выходные данные |
Пояснения |
| 1 |
5
2 1 1 3 2 |
1 2 3 2 1 |
Здесь неудобство хоровода равно 1, так как разность в росте между соседними детьми равна 1, 1, 1, 1 и 0 соответственно. Обратите внимание, что последовательности [23211] , [32112] задают те же хороводы и отличаются только выбором ребёнка с номером 1. |
| 2 |
3
30 10 20 |
10 30 20 |
Неудобство хоровода равно 20, так как разность в росте детей высотой 10 и 30 равна 20. |
| |
|
|
Киноакадемия
Жадный алгоритм
Использование сортировки
В финал конкурса Киноакадемии вышли \(n\) лучших кинофильмов 2014 года. В конкурсе награждаются фильмы в двух номинациях: лучшая режиссура и лучший сценарий. По правилам конкурса в каждой номинации должен быть награжден ровно один фильм, причём в разных номинациях — разные фильмы.
В ходе многочисленных опросов зрителей и кинокритиков удалось собрать данные, показывающие, какой уровень ликования вызовет победа каждого фильма в каждой из номинаций. Дотошные журналисты на этом не остановились и дополнительно выяснили, каким будет уровень ликования, если тот или иной фильм не выиграет ни в одной из номинаций.
Требуется написать программу, которая по результатам опросов определяет наибольший суммарный уровень ликования, которого можно добиться выбором фильмов для награждения в указанных номинациях.
Формат входных данных
В первой строке задано целое число \(n\) — количество кинофильмов, участвующих в финале конкурса Киноакадемии. В следующих \(n\) строках содержатся по три целых числа \(a_i\), \(b_i\), \(c_i\) — уровень ликования, если \(i\)-й фильм не выиграет ни в одной из номинаций, уровень ликования, если этот фильм выиграет в номинации на лучшую режиссуру, и уровень ликования, если этот фильм выиграет в номинации на лучший сценарий.
Формат выходных данных
Первая строка должна содержать одно число — наибольший возможный суммарный уровень ликования. Вторая строка должна содержать два целых числа — номера фильмов-победителей в номинациях лучшая режиссура и лучший сценарий соответственно. Фильмы нумеруются натуральными числами от 1 до \(n\). Если оптимальных способов выбора награждаемых фильмов несколько, можно вывести любой из них.
Пояснение к примеру
В приведенном примере наибольший суммарный уровень ликования равен \(3 + 5 + 9 = 17\).
| |
|
|
Шоссе
Способы задания графа
Использование сортировки
Элементарная геометрия
Во Флатландии \(n\) городов, расположенных в различных точках плоскости. Известно, что никакие три города не лежат на одной прямой.
Правительство решило построить в стране сеть сверхскоростных шоссе. Сеть шоссе должна быть такой, чтобы из любого города можно было проехать в любой другой по построенным шоссе. А в целях экономии средств было решено, что путь, соединяющий любые два города, должен быть единственным. Каждое шоссе представляет собой отрезок, соединяющий некоторую пару городов.
Завод, выполняющий этот госзаказ, подготовил проект сети шоссе. Проект представляет собой описание \(n - 1\) шоссе. Каждое шоссе задается городами, которые оно соединяет. В целях секретности вместо названий городов в проекте были использованы коды — числа от 1 до \(n\).
Однако когда дело дошло до реализации проекта, выяснилось, что документ, в котором было указано соответствие номеров городам, утерян. Поскольку проект приурочен к пятисотлетию культурной столицы Флатландии, переделывать проект полностью оказалось невозможно. Поэтому было решено установить некоторое новое соответствие номеров городам.
При попытке это сделать разработчики проекта столкнулись со следующей проблемой. В соответствии с техническими нормами строительства, недопустимо, чтобы шоссе пересекались вне городов. Поэтому не любое сопоставление номеров городам допустимо. После пары бессонных ночей главный инженер завода решил поручить спасение проекта вам.
Ваша задача — таким образом сопоставить числам от 1 до \(n\) города, чтобы после реализации проекта шоссе не пересекались вне городов, которые они соединяют.
Формат входных данных
В первой строке содержится целое число \(n\) — количество городов во Флатландии (\(2 \le n \le 1500\)).
Далее следует \(n\) описаний городов. Описание каждого города состоит из двух строк. Первая строка содержит название города — строку, состоящую из символов с ASCII-кодами от 33 до 127. Названия различных городов не совпадают. Длина названия города не превышает 60 символов. Вторая строка описания города содержит два целых числа \(x\) и \(y\) — координаты города. Координаты не превышают \(10^4\) по абсолютной величине.
Далее следуют \(n - 1\) строк, которые описывают проект строительства сети шоссе в его текущем состоянии. Каждая строка содержит по два целых числа — номера городов, соединенных шоссе в проекте. Никакое шоссе в проекте не соединяет город сам с собой, никакие два города не соединены более чем одним шоссе.
Формат выходных данных
Выведите \(n\) строк, \(i\)-я из этих строк должна содержать название города, который следует сопоставить числу \(i\) в проекте. Если решений несколько, выведите любое.
Если решения не существует, выведите <<No solution>>.
Иллюстрация к примеру
| |
|
|
Найди пару
Строки
Использование сортировки
Друзья играют в интересную игру со словами, суть которой заключается в разбиении слов на пары.
У друзей есть \(n\) слов одинаковой длины. Они хотят выбрать такое наибольшее число \(k\), чтобы можно было разбить слова на пары так, чтобы в каждой паре у слов совпадало хотя бы \(k\) первых букв.
Помогите друзьям найти искомое максимальное значение \(k\).
Формат входных данных
В первой строке входных данных находится целое число \(n\) — количество слов (\(1 \leqslant n \leqslant 2\cdot 10^5\), \(n\) — четное).
В следующих \(n\) строках заданы слова, которые есть у друзей. Гарантируется, что все строки имеют одинаковую длину и суммарная длина строк не превышает \(2 \cdot 10^6\).
Формат выходных данных
В единственной строке выведите число \(k\) — искомое максимальное значение.
| |
|
|
Шоколадная мудрость
Алгоритмы сортировки
Использование сортировки
Шоколад помогает развивать ум и укреплять дух! Старец Летовец после своих занятий угощает своих учеников шоколадом. На следующем занятии у него будет M учеников и каждому из них Старец хочет дать по одной плитке шоколада.
Чтобы купить нужное количество шоколада, старец отправил своего праправнука Летовёнка разузнать, какое минимальное количество денег ему понадобится.
Оказывается, каждый магазин продаёт шоколад по разной цене. В i-м магазине можно купить не более Bi плиток шоколада по цене Аi рублей за плитку. Летовец хочет потратить как можно меньше денег, но при этом купить ровно M плиток шоколада.
Помогите Летовёнку посчитать какую минимульную сумму на шоколад потратит старец Летовец.
Формат входных данных
В первой строке заданы два числа: N и M (1 <= N, M <= 105). Следующие N строк содержат по 2 числа: Ai (1 <= Ai <= 109) и Bi (1 <= Вi <= 105). \(B_1 + B_2 +... + B_N >= M\).
Формат выходных данных
Выведите минимальную сумму денег, необходимую для покупки M плиток шоколада.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
2 5
4 9
2 4 |
12 |
| 2 |
4 30
6 18
2 5
3 10
7 9 |
130 |
| 3 |
1 100000
1000000000 100000 |
100000000000000 |
| |
|
|
65813
Использование сортировки
В школе в очередной раз заболел преподаватель физкультуры Виктор Дмитриевич. Поэтому директор принял решение, что кто-то из свободных учителей проведёт занятие. После долгих размышлений, самым свободным оказался учитель информатики Анатолий Иванович, который очень любит алгоритмы сортировки, что вызвало сразу проблему у учеников. Ведь Анатолий Иванович первым делом сказал ребятам построиться в шеренгу, но не как обычно (по убыванию роста, ), а так, чтобы каждое нечётное место было отсортировано по росту по убыванию (первое место - самый высокий ученик, третье место выше пятого, пятое выше седьмого и так далее)), а каждое чётное по возрастанию (второе место - самый низкий ученик, четвёртый второй по росту среди всех, шестой - третий по росту среди всех и так далее) (учеников Анатолий Иванович нумеровал с 1).
Помогите ученикам получить правильный порядок, как встать им в шеренгу так, чтобы Анатолий Иванович оказался доволен.
Формат входных данных
На первой строке подаётся число N (1 <= N <= 121)– количество учеников в классе.
На N последующих строках подаются строки вида имя-рост (например, «Ivan 175»), где на первом месте указывается имя ученика – оно всегда одним словом на английском языке, без пробелов, а в конце указывается рост ученика (целое число от 100 до 220).
Формат выходных данных
Выведите имена учеников в одну строку через пробел, как они должны встать на уроке физкультуры.
Примечание:
Имена учеников у всех уникальны, рост ни у кого не повторяется.
| |
|
|
66172
Словари
Использование сортировки
Циклы
Арифметические операции
Белочка живет в дубовом парке. Каждый день до обеда она собирает ровно К желудей и складывает их в дупле одного из дубов. Последнее время вечером каждого воскресенья в парк приходит мальчик Витя. Он обнаружил дупло, в котором белочка хранит жёлуди. Для своих игр он каждый раз забирает Т желудей из дупла.
Известно, что после последнего прихода Вити в парк, в дупле осталось Х желудей. Необходимо определить через сколько дней после этого прихода Вити, белочка сможет собрать не менее М желудей в дупле.
Формат ввода
На вход программе в одной строке подается четыре целых числа, записанные через пробел К, M, Т, Х (1≤ К, M, Т, Х ≤109).
Формат вывода
Вывести одно целое число – количество дней, через которое белочка сможет собрать необходимое число желудей.
Если белочка не сможет собрать нужное число желудей никогда, вывести число -1.
| |
|
|
66173
Одномерные массивы
Использование сортировки
Цикл for
Автомат получает на вход последовательность натуральных чисел и работает с ними по следующим правилам:
1)Если число кратно 3, автомат добавляет его значение в первуюконтрольную сумму.
2)Если число не кратно 3, автомат добавляет его значение вовторую контрольную сумму.
После обработки последовательности автомат удваивает большую контрольную сумму, утраивает меньшую контрольную сумму, складывает их и выводит результат.
Располагая последовательностью, определите, какой результат выведет автомат.
Формат ввода
На вход программе в первой строке подается натуральное число N (5 ≤ N ≤ 10000) – количество чисел. Далее в N строках подаётся по одному натуральному числу, не превышающему 1000.
Формат вывода
Вывести одно целое число – результат обработки последовательности, который можно получить по правилам, описанным в условии задачи.
| |
|
|
Аркадий Аркадьевич делает грядки
Использование сортировки
Аркадий Аркадьевич, широко известный в узких кругах инженер, после выхода на пенсию решил отдохнуть и заняться садоводством. Он уже купил себе участок и собирается сажать там различные овощи и фрукты. Но всем известно, что растения должны расти в грядках, поэтому сейчас Аркадий Аркадьевич занят их сооружением.
Для того чтобы собрать прямоугольную грядку, нужны 4 доски. В идеале это должны быть две пары досок равной длины, тогда из них можно сложить ровный прямоугольник. Но если доски имеют неравную длину, то в одном из углов полученной грядки можно разместить пластиковый уголок: две планки длины \(r\), скреплённые под прямым углом. Уголок со стороной \(r\) позволит увеличить длины двух досок на величину, не превосходящую \(r\). Если противоположными сторонами грядки будут доски длины \(a\) и \(b\), а также \(c\) и \(d\) соответственно, то для того чтобы сделать прямоугольную грядку из этих досок, понадобится уголок размера \(\max(|a-b|, |c-d|)\) . Например, чтобы сделать грядку из досок длины 5, 7, 3, 2, понадобится уголок размера 2. На рисунке чёрным цветом изображены доски и красным цветом изображён уголок.

В сарае у Аркадия Аркадьевича нашлись \(n\) досок, \(i\)-я из которых имеет длину \(l_i\). Теперь он хочет выбрать из них четыре и сложить из них грядку таким образом, чтобы использовать уголок наименьшего размера. Помогите ему.
Первая строка входных данных содержит число \(n\) (\(4 \leq n \leq 10^5\)) — количество досок в сарае у Аркадия Аркадьевича.
Следующие \(n\) строк содержат числа \(l_1, \dots, l_n\) (\(1 \leq l_i \leq 10^9\)) — длины досок.
Программа должна сначала вывести число \(r\) — минимально возможный размер уголка.
Во второй строке выведите 4 числа \(a\), \(b\), \(c\), \(d\) — длины досок, которые необходимо выбрать для грядки. При этом противоположными сторонами прямоугольника будут доски \(a\) и \(b\), а также \(c\) и \(d\). Если есть разные варианты выбора досок для грядки с одной и той же величиной уголка, можно вывести любой из них.
Решения, правильно работающие, когда \(n \leq 30\), будут оцениваться в 20 баллов.
Решения, правильно работающие, когда \(n \leq 100\), будут оцениваться в 45 баллов.
Решения, правильно работающие, когда \(n \leq 500\), будут оцениваться в 65 баллов.
Решения, правильно работающие, когда все \(l_i \leq 30\), будут оцениваться в 10 баллов.
| |
|
|
Анаграммы: города
Строки
Словари
Использование сортировки
Два слова являются анаграммами, если одно можно получить из другого перестановкой букв.
На вход подаётся число \(N\), затем \(N\) слов (каждое с новой строки, все строчные).
Программа должна:
- Разбить слова на группы анаграмм
- Вывести каждую группу, в которой больше одного слова
- Группы отсортировать по убыванию размера. При равном размере — по алфавиту первого слова
- Слова внутри группы — в алфавитном порядке, через пробел
Формат входных данных
Первая строка — целое число \(N\) (\(1 \le N \le 30\)).
Следующие \(N\) строк — по одному слову (строчные русские буквы).
Формат выходных данных
Группы анаграмм (только те, где больше одного слова). Слова в группе через пробел в алфавитном порядке. Каждая группа на отдельной строке.
| |
|
|
Анаграммы: природа
Словари
Строки
Использование сортировки
Два слова являются анаграммами, если одно можно получить из другого перестановкой букв.
На вход подаётся число \(N\), затем \(N\) слов (каждое с новой строки, все строчные).
Программа должна:
- Разбить слова на группы анаграмм
- Вывести каждую группу, в которой больше одного слова
- Группы отсортировать по убыванию размера. При равном размере — по алфавиту первого слова
- Слова внутри группы — в алфавитном порядке, через пробел
Формат входных данных
Первая строка — целое число \(N\) (\(1 \le N \le 30\)).
Следующие \(N\) строк — по одному слову (строчные русские буквы).
Формат выходных данных
Группы анаграмм (только те, где больше одного слова). Слова в группе через пробел в алфавитном порядке. Каждая группа на отдельной строке.
| |
|
|
Анаграммы: еда
Строки
Словари
Использование сортировки
Два слова являются анаграммами, если одно можно получить из другого перестановкой букв. Например, «кот», «ток» и «кто» — это анаграммы друг друга.
На вход подаётся число \(N\), затем \(N\) слов (каждое с новой строки, все строчные).
Программа должна:
- Разбить слова на группы анаграмм
- Вывести каждую группу, в которой больше одного слова
- Группы отсортировать по убыванию размера. При равном размере — по алфавиту первого слова
- Слова внутри группы — в алфавитном порядке, через пробел
Формат входных данных
Первая строка — целое число \(N\) (\(1 \le N \le 30\)).
Следующие \(N\) строк — по одному слову (строчные русские буквы).
Формат выходных данных
Группы анаграмм (только те, где больше одного слова). Слова в группе через пробел в алфавитном порядке. Каждая группа на отдельной строке.
Примечание
Подсказка: два слова — анаграммы, если при сортировке их букв получается одинаковый результат. Например, sorted("кот") и sorted("ток") оба дают ['к', 'о', 'т'].
| |
|
|
Журнал домашних заданий
Словари
Использование сортировки
Алгоритмы обработки
Учитель ведёт журнал сдачи домашних заданий. На вход подаётся число \(N\) — количество записей. Затем \(N\) строк в формате:
имя предмет балл
Один ученик может сдавать задания по разным предметам.
Программа должна для каждого ученика подсчитать количество сданных заданий и суммарный балл. Вывести таблицу, отсортированную по убыванию количества заданий. При равном количестве — по возрастанию суммы баллов. При полном равенстве — в алфавитном порядке.
Формат входных данных
Первая строка — целое число \(N\) (\(1 \le N \le 30\)).
Следующие \(N\) строк — имя, предмет и балл через пробел.
Формат выходных данных
Для каждого ученика строка в формате: Имя — X заданий, Y баллов
| |
|
|
Топ-3 результата на соревнованиях
Использование сортировки
Одномерные массивы
На соревнованиях по прыжкам в длину зафиксированы результаты спортсменов. На вход подаётся число \(N\) — количество спортсменов. Затем вводятся \(N\) целых чисел (каждое с новой строки) — дальность прыжка в сантиметрах.
Программа должна:
- Собрать все числа в список
- Отсортировать список по возрастанию
- Вывести отсортированный список
- Вывести три наибольших значения (последние 3 элемента отсортированного списка)
Формат входных данных
Первая строка — целое число \(N\) (\(3 \le N \le 20\)).
Следующие \(N\) строк — по одному целому числу (от 100 до 900).
Формат выходных данных
Первая строка — отсортированный список в формате [a, b, c, ...].
Вторая строка — три наибольших значения в формате Топ-3: [x, y, z].
| |
|
|
Топ-3 самых жарких дня
Использование сортировки
Метеостанция записала температуру за несколько дней. На вход подаётся число \(N\) — количество дней. Затем вводятся \(N\) целых чисел (каждое с новой строки) — температура каждого дня.
Программа должна:
- Собрать все числа в список
- Отсортировать список по возрастанию
- Вывести отсортированный список
- Вывести три наибольших значения (последние 3 элемента отсортированного списка)
Формат входных данных
Первая строка — целое число \(N\) (\(3 \le N \le 20\)).
Следующие \(N\) строк — по одному целому числу (от \(-50\) до \(50\)).
Формат выходных данных
Первая строка — отсортированный список в формате [a, b, c, ...].
Вторая строка — три наибольших значения в формате Топ-3: [x, y, z].
| |
|
|
Топ-3 результата на экзамене
Использование сортировки
В школе прошёл экзамен. На вход подаётся число \(N\) — количество учеников. Затем вводятся \(N\) целых чисел (каждое с новой строки) — баллы учеников.
Программа должна:
- Собрать все числа в список
- Отсортировать список по возрастанию
- Вывести отсортированный список
- Вывести три наибольших значения (последние 3 элемента отсортированного списка)
Формат входных данных
Первая строка — целое число \(N\) (\(3 \le N \le 20\)).
Следующие \(N\) строк — по одному целому числу (от 0 до 100) — балл ученика.
Формат выходных данных
Первая строка — отсортированный список в формате [a, b, c, ...].
Вторая строка — три наибольших значения в формате Топ-3: [x, y, z].
| |
|
|
Слова по длине
Строки
Использование сортировки
Одномерные массивы
Пользователь вводит количество слов, а затем сами слова — каждое на отдельной строке. Сохраните все слова в список.
Выведите две строки:
- Исходный список — слова через пробел в порядке ввода.
- Отсортированный список — слова через пробел по возрастанию длины. Если длины равны, сохраните порядок ввода.
Формат входных данных
Первая строка — целое число \(N\) (\(1 \le N \le 15\)).
Следующие \(N\) строк — по одному слову (строчные русские буквы, без пробелов).
Формат выходных данных
Две строки: исходный список и отсортированный по возрастанию длины, слова через пробел.
Примечание
Подсказка: используйте key=len в функции sorted().
| |
|
|
Числа по модулю
Использование сортировки
Пользователь вводит количество чисел, а затем сами числа — каждое на отдельной строке. Сохраните все числа в список.
Выведите две строки:
- Исходный список — числа через пробел в порядке ввода.
- Отсортированный список — числа через пробел по возрастанию их модуля (абсолютного значения). Если модули равны, сохраните порядок ввода.
Формат входных данных
Первая строка — целое число \(N\) (\(1 \le N \le 20\)).
Следующие \(N\) строк — по одному целому числу (от \(-1000\) до \(1000\)).
Формат выходных данных
Две строки: исходный список и отсортированный по возрастанию модуля, числа через пробел.
Примечание
Модуль числа — это число без знака. Например, модуль числа \(-7\) равен \(7\), модуль числа \(3\) равен \(3\).
Подсказка: используйте key=abs в функции sorted().
| |
|
|
Слова по алфавиту
Использование сортировки
Строки
Одномерные массивы
Пользователь вводит количество слов, а затем сами слова — каждое на отдельной строке. Сохраните все слова в список.
Выведите две строки:
- Исходный список — слова через пробел в порядке ввода.
- Отсортированный список — слова через пробел в алфавитном порядке.
Формат входных данных
Первая строка — целое число \(N\) (\(1 \le N \le 15\)).
Следующие \(N\) строк — по одному слову (строчные русские буквы, без пробелов).
Формат выходных данных
Две строки: исходный список и отсортированный по алфавиту, слова через пробел.
| |
|
|
Числа по убыванию
Использование сортировки
Пользователь вводит количество чисел, а затем сами числа — каждое на отдельной строке. Сохраните все числа в список.
Выведите две строки:
- Исходный список — числа через пробел в порядке ввода.
- Отсортированный список — числа через пробел по убыванию.
Формат входных данных
Первая строка — целое число \(N\) (\(1 \le N \le 20\)).
Следующие \(N\) строк — по одному целому числу (от \(-1000\) до \(1000\)).
Формат выходных данных
Две строки: исходный список и отсортированный по убыванию, числа через пробел.
| |
|
|
Числа по возрастанию
Одномерные массивы
Использование сортировки
Алгоритмы обработки
Пользователь вводит количество чисел, а затем сами числа — каждое на отдельной строке. Сохраните все числа в список.
Выведите две строки:
- Исходный список — числа через пробел в порядке ввода.
- Отсортированный список — числа через пробел по возрастанию.
Формат входных данных
Первая строка — целое число \(N\) (\(1 \le N \le 20\)).
Следующие \(N\) строк — по одному целому числу (от \(-1000\) до \(1000\)).
Формат выходных данных
Две строки: исходный список и отсортированный по возрастанию, числа через пробел.
| |
|
|
Минимум, максимум и сортировка
Использование сортировки
Пользователь вводит несколько целых чисел в одной строке через пробел. Выведите три строки: минимальное число, максимальное число и все числа в отсортированном порядке (по возрастанию).
Формат входных данных
Одна строка — целые числа через пробел (от 2 до 20 чисел, каждое от \(-1000\) до \(1000\)).
Формат выходных данных
Три строки:
- Минимальное число.
- Максимальное число.
- Все числа в порядке возрастания через пробел.
| |
|
|
Имена по алфавиту
Использование сортировки
Пользователь вводит несколько имён через пробел в одной строке. Выведите их в алфавитном порядке.
Формат входных данных
Одна строка — имена через пробел (от 2 до 15 имён). Все имена начинаются с заглавной буквы, остальные строчные. Имена состоят только из русских букв.
Формат выходных данных
Одна строка — имена в алфавитном порядке через пробел.
| |
|
|
Сортировка по убыванию
Использование сортировки
Пользователь вводит несколько целых чисел в одной строке через пробел. Выведите их в порядке убывания.
Формат входных данных
Одна строка — целые числа через пробел (от 2 до 20 чисел, каждое от \(-1000\) до \(1000\)).
Формат выходных данных
Одна строка — те же числа, отсортированные по убыванию, через пробел.
| |
|
|
Сортировка по возрастанию
Использование сортировки
Пользователь вводит несколько целых чисел в одной строке через пробел. Выведите их в порядке возрастания.
Формат входных данных
Одна строка — целые числа через пробел (от 2 до 20 чисел, каждое от \(-1000\) до \(1000\)).
Формат выходных данных
Одна строка — те же числа, отсортированные по возрастанию, через пробел.
| |
|
|
Словарь длин слов
Словари
Использование сортировки
Строки
Пользователь вводит несколько слов через пробел. Постройте словарь, где ключ — слово, значение — его длина. Выведите пары в формате слово: длина, отсортированные по длине в порядке возрастания. Если длины одинаковые, сортируйте по алфавиту.
Формат входных данных
Одна строка — слова через пробел (от 2 до 15 слов). Все слова различны.
Формат выходных данных
Строки в формате слово: длина, отсортированные по длине (по возрастанию), при равенстве — по алфавиту.
| |
|
|
Сортировка словаря по значениям
Использование сортировки
Пользователь вводит количество учеников, а затем для каждого — имя и оценку. Сохраните данные в словарь. Выведите пары в формате Имя — оценка, отсортированные по оценке в порядке убывания. Если оценки одинаковые, сохраните порядок ввода.
Формат входных данных
Первая строка — целое число \(N\) (\(1 \le N \le 10\)).
Следующие \(N\) строк — имя и оценка (целое число) через пробел. Имена уникальны.
Формат выходных данных
\(N\) строк в формате Имя — оценка, отсортированные по убыванию оценки.
| |
|
|
Сортировка словаря по ключам
Использование сортировки
Словари
Алгоритмы обработки
Пользователь вводит количество учеников, а затем для каждого — имя и оценку. Сохраните данные в словарь. Выведите пары в формате Имя — оценка, отсортированные по имени в алфавитном порядке.
Формат входных данных
Первая строка — целое число \(N\) (\(1 \le N \le 10\)).
Следующие \(N\) строк — имя и оценка через пробел. Имена уникальны, состоят из русских букв, начинаются с заглавной.
Формат выходных данных
\(N\) строк в формате Имя — оценка, отсортированные по имени (алфавитный порядок).
| |
|
|
Миссия Пиксель. 9. Отчёт командира
Использование сортировки
🎯
Шаг 9: Отчёт командира
Средне
Финальная задача перед решающей атакой! Нужно составить рейтинг серверных зон по суммарному урону. Данные разбросаны — одна зона может встречаться несколько раз. Сгруппируй и отсортируй!
Дано N строк. В каждой — название зоны и число (урон), через пробел. Одна зона может встречаться несколько раз.
Для каждой зоны посчитай суммарный урон, затем выведи зоны в порядке убывания суммарного урона. При равном уроне — в алфавитном порядке.
Входные данные
В первой строке — число N. В каждой из следующих N строк — название зоны и целое число через пробел.
Выходные данные
На каждой строке: название и суммарный урон через пробел (по убыванию урона).
| |
|
|
Миссия Пиксель. 6. Рейтинг Героев
Использование сортировки
Алгоритмы обработки
🏆
Шаг 6: Рейтинг героев
Средне
Вирус перемешал рейтинги героев. Чтобы восстановить турнирную таблицу, нужно отсортировать баллы и показать лидеров. Применяй навыки сортировки!
Дана строка из N целых чисел — рейтинги героев. Выведи три строки:
- все числа, отсортированные по возрастанию, через пробел;
- три наибольших числа через пробел (от меньшего к большему);
- среднее арифметическое, округлённое вниз (целочисленное деление).
Входные данные
Одна строка: N целых чисел через пробел (3 ≤ N ≤ 100, значения от 0 до 10000).
Выходные данные
Три строки.
| |
|
|
Why Did the Cow Cross the Road III
Жадный алгоритм
Использование сортировки
Задачи на моделирование
Фермер Джон на старости лет стал параноиком. Он построил огромную
изгородь вокруг фермы для защиты своих коров. Коровам такая идея не понравилась.
Соседние коровы ещё имеют возможность войти, но только через одни ворота
и с большой очередью, потому что каждой нужно ответить на длинный список вопросов,
прежде чем войти.
Для каждой из \(N\) коров, посещающих ферму, вам сообщается время, когда она
прибывает к воротам и количество времени, которое её требуется для ответов на
вопросы. В каждый момент времени только одна корова опрашивается, поэтому,
если много коров прибывает примерно в одно и то же время, они должны ждать
своей очереди отвечать на вопросы. Например, если корова прибыла во время 5
и отвечает на вопросы 7 единиц времени, то другая корова, прибывшая во время 8
должна подождать до времени 12, что начать отвечать на вопросы.
Определите минимально возможное время, за которое все коровы войдут на ферму.
ФОРМАТ ВВОДА (файл cowqueue.in):
Первая строка ввода содержит \(N\), положительное целое число, не более 100.
Каждая из последующих \(N\) строк описывает одну корову, задавая время прибытия
и время, которое требуется ей для ответов на вопросы. Каждое из этих чисел
- положительное целое число не более 1,000,000.
ФОРМАТ ВЫВОДА (файл cowqueue.out):
Определите минимально возможное время, в которое все коровы завершат обработку.
| |
|
|
Counting Haybales
Бинарный поиск в массиве
Использование сортировки
Фермер Джон разместил свои \(N\) (\(1 \leq N \leq 100,000\)) стогов сена в
различных точках одномерной дороги вдоль его фермы. Вам требуется ответить
на \(Q\) (\(1 \leq Q \leq 100,000\)) запросов, о том сколько стогов сена находится
внутри указанного участка дороги.
ФОРМАТ ВВОДА (файл haybales.in):
Первая строка содержит \(N\) и \(Q\).
Следующая строка содержит \(N\) различных целых чисел, каждое в интервале
\(0 \ldots 1,000,000,000\), указывающих местоположения стогов сена.
Каждая из последующих \(Q\) строк содержит два целых числа \(A\) и \(B\)
(\(0 \leq A \leq B \leq 1,000,000,000\)) задающих запрос на количество стогов
сена между \(A\) и \(B\), включительно.
ФОРМАТ ВЫВОДА (файл haybales.out):
Вы должны вывести \(Q\) строк. Для каждого запроса выведите количество
стогов сена в соответствующем интервале.
| |
|
|
High Card Wins
Жадный алгоритм
Использование сортировки
Корова Беси - фанат карточных игр. Однако у неё нет достойных противников.
Все они играют в полностью предсказуемой манере. Однако надо ещё придумать,
как выиграть у них.
Беси и Эльза играют в простую карточную игру, в которой имеется колода
из \(2N\) карт, последовательно пронумерованных \(1 \ldots 2N\). Они делят её
поровну - \(N\) карт Беси и \(N\) карт Эльзе. Затем они играют \(N\) раундов,
в каждом из которых Беси и Эльза выкладывают по одной карте, и тот, у кого
карта больше, зарабатывает очко.
Беси может предсказать порядок, в котором будет выкладывать карты Эльза.
Определите максимальное количество очков, которое может выиграть Беси.
ФОРМАТ ВВОДА (файл highcard.in):
Первая строка ввода содержит значение N (\(1 \leq N \leq 50,000\)).
Следующие N строк содержат карты, которыми будет играть в каждом
из последующих раундов игры. Заметим, что из этой информации легко
определить карты, которые на руках у Беси.
ФОРМАТ ВЫВОДА (файл highcard.out):
Выведите в одной строке максимальное количество очков, которое может
заработать Беси.
| |
|
|
High Card Wins
Жадный алгоритм
Использование сортировки
Задачи на моделирование
Корова Беси - фанат карточных игр. Однако у неё нет достойных противников.
Все они играют в полностью предсказуемой манере. Однако надо ещё придумать,
как выиграть у них.
Беси и Эльза играют в простую карточную игру, в которой имеется колода
из \(2N\) карт, последовательно пронумерованных \(1 \ldots 2N\). Они делят её
поровну - \(N\) карт Беси и \(N\) карт Эльзе. Затем они играют \(N\) раундов,
в каждом из которых Беси и Эльза выкладывают по одной карте, и тот, у кого
карта больше, зарабатывает очко.
Беси может предсказать порядок, в котором будет выкладывать карты Эльза.
Определите максимальное количество очков, которое может выиграть Беси.
ФОРМАТ ВВОДА (файл highcard.in):
Первая строка ввода содержит значение N (\(1 \leq N \leq 50,000\)).
Следующие N строк содержат карты, которыми будет играть в каждом
из последующих раундов игры. Заметим, что из этой информации легко
определить карты, которые на руках у Беси.
ФОРМАТ ВЫВОДА (файл highcard.out):
Выведите в одной строке максимальное количество очков, которое может
заработать Беси.
| |
|
|
High Card Low Card (Platinum)
Жадный алгоритм
Использование сортировки
Беси и Эльза играютв простую карточную игру. Берётся колода из \(2N\) карт,
последовательно пронумерованных \(1 \ldots 2N\), и делится на две части по
\(N\) карт для Беси и \(N\) карт для Эльзы. Затем они играют \(N\) раундов,
в каждом из которых Беси и Эльза выкладывают по одной карте. Изначально,
одно очко за каждый раунд выигрывает игрок, у которого карта больше.
Однако однажды за всю игру Беси может переключить правила игры так, что
до конца игры выигрывать одно очко за раунд будет игрок, карта которого
меньше. Беси может также выбрать не использовать эту опцию, оставляя на всю игру правило "выигрывает бОльшая карта" или она может включить это правило перед первыми раундом, и тогда вся игра ведётся по правилу "выигрывает меньшая карта".
Зная порядок, в котором будет выкладывать свои карты Эльза, помогите Беси
определить максимальное количество очков, которое она сможет заработать.
ФОРМАТ ВВОДА (файл cardgame.in):
Первая строка ввода содержит значение N ( \(2 \leq N \leq 50,000\)).
Следующие N строк содержат карты которым играет Эльзав том порядке как
она их будет выкладывать в последовательных раундах игры. Заметим, что по
этой информации легко определить, какие карты на руках у Беси.
ФОРМАТ ВЫВОДА (файл cardgame.out):
Выведите одну строку, содержащую максимальное количество очков, которое
может заработать Беси.
| |
|
|
Maximizing Productivity
Использование сортировки
У Фермера Джона есть \(N\) (\(1 \leq N \leq 2 \cdot 10^5\)) ферм, пронумерованных
от \(1\) до \(N\). Известно, что ФД закрывает ферму \(i\) в момент времени \(c_i\).
Беси просыпается в момент времени \(S\) и хочет максимизировать производительность
своего дня посетив как можно больше ферм, прежде чем они закроются. Она планирует
посетить ферму \(i\) в момент времени \(t_i + S\). Беси должна прибыть на ферму строго раньше
чем ФД закроет её, чтобы действительно посетить эту ферму.
У Беси есть \(Q\) \((1 \leq Q \leq 2 \cdot 10^5)\) запросов. Для каждого
запроса она даёт Вам два целых числа \(S\) и \(V\). Для каждого запроса выведите
сможет ли Беси посетить не менее \(V\) ферм, если она проснётся в момент времени
\(S\).
ФОРМАТ ВВОДА (с клавиатуры / stdin):
Первая строка состоит из \(N\) и \(Q\).
Вторая строка состоит из \(c_1, c_2, c_3 \dots c_N\) (\(1 \leq c_i \leq 10^6\)).
Третья строка состоит из \(t_1, t_2, t_3 \dots t_N\) (\(1 \leq t_i \leq 10^6\)).
Каждая из последующих \(Q\) строк содержит два целых числа \(V\) (\(1 \leq V \leq N\)) and \(S\)
(\(1 \leq S \leq 10^6\)).
ФОРМАТ ВЫВОДА (на экран / stdout):
Для каждого из \(Q\) запросов, выведите YES или NO на новой строке.
| |
|
|
Milk Sum
Использование сортировки
Префиксные суммы(минимумы, ...)
реализация
**Примечание. Ограничение по времени для этой задачи – 4 секунды, что в 2 раза больше, чем по умолчанию.**
\(N\) коров фермера Джона (\(1\le N\le 1,5\cdot 10^5\)) имеют целую продуктивность
\(a_1,\dots,a_N\). То есть \(i\)я корова производит \(a_i\) единиц молока за
минуту ( \(0 \leq a_i \leq 10^8\)).
Каждое утро фермер Джон начинает с того, что все \(N\) коров подключены к его дойке.
От него требуется отцеплять их по одной, отправляя прочь
для их ежедневных упражнений. Первая корова, которую он отправляет, снимается с крючка после
всего 1 минуты дойки, вторая корова, которую он отправляет, отцепляется после двух
минут дойки и так далее. Поскольку первая корова (скажем, корова \(x\)) тратит только
одну минуту на доильном аппарате она вносит только \(a_x\) единиц общего количества
молока. Вторая корова (скажем, корова \(y\)) тратит на доение всего две минуты
и, таким образом, дает \(2a_y\) единиц общего количества молока. Третья корова
(скажем, корова \(z\)) приносит всего \(3a_z\) единиц и так далее. Пусть \(T\) представляет собой
максимально возможное количество молока, которое может собрать фермер Джон, если он
отцепляет своих коров в оптимальном порядке.
Фермеру Джону интересно, как повлияет на \(T\), если часть производительностей молока
в его стаде были другими. Для каждого из запросов \(Q\) (\(1\le Q\le 1.5\cdot 10^5\))
каждое из которых задано двумя целыми числами \(i\) и \(j\), пожалуйста, рассчитайте, какой будет
новое значение \(T\), если \(a_i\) было установлено в \(j\) (\(0 \leq j \leq 10^8\)). Обратите внимание, что
каждый запрос рассматривает временное потенциальное изменение независимо от всех других
запросов; то есть \(a_i\) возвращается к исходному значению перед следующим запросом.
ФОРМАТ ВВОДА (ввод поступает с терминала/стандартного ввода):
Первая строка содержит \(N\).
Вторая строка содержит \(a_1\dots a_N\).
Третья строка содержит \(Q\).
Следующие \(Q\) строк содержат по два целых числа \(i\) и \(j\), разделенных пробелом.
ФОРМАТ ВЫВОДА (вывод на терминал / стандартный вывод):
Пожалуйста, выведите значение \(T\) для каждого из запросов \(Q\) в отдельных строках.
| |
|
|
Minimizing Haybales
Использование сортировки
У Фермера Джона есть \(N\) (\(1\leq N \leq 10^5\)) стогов из тюков сена.
Для каждого \(i\in [1,N]\), \(i\)-ый стог имеет \(h_i\) (\(1\le h_i\le 10^9\)) тюков.
Бесси может выполнять следующие операции:
- Если высоты двух соседних стогов сена различаются не более чем на \(K\) (\(1\le K\le 10^9\)),
она может поменять местами два стога
Какую лексикографически минимальную последовательность высот Беси может получить
после некоторой последовательности таких операций?
**Примечание: ограничения на время и память для этой задачи 4сек и 512 Мбт,
что в 2 раза больше значений по умолчанию.**
ФОРМАТ ВВОДА (с клавиатуры / stdin):
Первая строка ввода содержит \(N\) и \(K\). \(i+1\)-ая строка содержит высоту \(i\)-того стога.
ФОРМАТ ВЫВОДА (на экран / stdout):
Выведите \(N\) строк, \(i\)-ая строка содержит высоту \(i\)-го стога в решении.
| |
|
|
Cow College
Использование сортировки
Фермер Джон планирует открыть новый университет для коров!
Имеется \(N\) (\(1 \le N \le 10^5\)) коров, которые потенциально могут посещать университет.
Каждая корова готова платить за обучение максимум \(c_i\) (\(1 \le c_i \le 10^6\)).
Фермер Джон может установить плату за обучение, которую все коровы должны оплатить.
Если эта плата больше, чем корова готова платить, она не платит и не учится в университете.
Фермер Джон хочет установить такую оплату, чтобы получить максимальную сумм оплат.
Определите эту максимальную сумму и установленную плату за обучение.
ФОРМАТ ВВОДА (с клавиатуры / stdin):
Первая строка содержит \(N\). Вторая строка содержит \(N\) целых чисел \(c_1, c_2, \dots, c_N\),
где \(c_i\) - это максимальная плата, которую готова платить корова \(i\).
ФОРМАТ ВЫВОДА (на экран / stdout):
Выведите максимальное количество денег, которое может получить ФД и оптимальную оплату
за обучение, которую он должен установить. Если имеется несколько вариантов, выберите тот
в котором минимальная оплата за обучение.
Заметим, что надо использовать 64-битный целый тип, например
"long" в Java, или "long long" в C/C++).
| |
|
|
Sleepy Cow Sorting
Жадный алгоритм
Использование сортировки
реализация
Фермер Джон пытается отсортировать свои \(N\) коров (\(1 \leq N \leq 100\)),
последовательно пронумерованных \(1 \dots N\).
В настоящий момент коровы выстроились в линию в порядке
\(p_1, p_2, p_3, \dots, p_N\), и ФД стоит перед коровой \(p_1\).
Он хочет переупорядочить коров так, чтобы они стали в порядке
\(1, 2, 3, \dots, N\), с коровой \(1\) перед ФД.
Фермера Джона слышит только корова, которая стоит перед ним.
В этот момент ФД может сказать ей перейти на \(k\) позиций назад
(\(k\) в интервале \(1 \ldots N-1\).). \(k\) коров, которых она проходит,
двигаются вперёд, освобождая место для неё, в которое она и
становится.
Например, пусть \(N=4\) и коровы стоят в таком порядке
ФД: 4, 3, 2, 1
Единственная корова, которая слышит ФД, это корова \(4\).
Если он скажет ей сдвинуться на 2 позиции, порядок станет таким:
ФД: 3, 2, 4, 1
Теперь ФД слышит только корова \(3\). Теперь ей можно давать инструкцию и т.д.
Определите последовательность инструкций (с минимальным их количеством),
которые должен дать ФД, чтобы отсортировать всех коров.
ФОРМАТ ВВОДА (файл sleepy.in):
Первая строка содержит \(N\). Вторая строка содержит \(N\) целых чисел,
разделённых одиночными пробелами : \(p_1, p_2, p_3, \dots, p_N\),
указывающих стартовый порядок коров.
ФОРМАТ ВЫВОДА (файл sleepy.out):
Первая строка должна содержать одно целое число \(K\), задающее минимальное
количество инструкций, которое требуется, чтобы отсортировать всех коров.
Вторая строка должна содержать \(K\) разделённых одиночными пробелами
целых чисел \(c_1, c_2, \dots, c_K\), каждое в интервале \(1 \ldots N-1\),
задающих последовательность инструкций, которая отсортирует исходную
последовательность коров.
Если имеется несколько оптимальных последовательностей инструкций,
выведите любую.
| |
|
|
Sleepy Cow Sorting
Использование сортировки
Фермер Джон пытается отсортировать свои \(N\) коров (\(1 \leq N \leq 100\)),
последовательно пронумерованных \(1 \dots N\).
В настоящий момент коровы выстроились в линию в порядке
\(p_1, p_2, p_3, \dots, p_N\), и ФД стоит перед коровой \(p_1\).
Он хочет переупорядочить коров так, чтобы они стали в порядке
\(1, 2, 3, \dots, N\), с коровой \(1\) перед ФД.
Фермера Джона слышит только корова, которая стоит перед ним.
В этот момент ФД может сказать ей перейти на \(k\) позиций назад
(\(k\) в интервале \(1 \ldots N-1\).). \(k\) коров, которых она проходит ,
двигаются вперёд, освобождая место для неё, в которое она и
становится.
Например, пусть \(N=4\) и коровы стоят в таком порядке
ФД: 4, 3, 2, 1
Единственная корова, которая слышит ФД, это корова \(4\).
Если он скажет ей сдвинуться на 2 позиции, порядок станет таким:
ФД: 3, 2, 4, 1
Теперь ФД слышит только корова \(3\). Теперь ей можно давать инструкцию и т.д.
Определите минимальное количество инструкций, которые должен дать ФД,
чтобы отсортировать всех коров.
ФОРМАТ ВВОДА (файл sleepy.in):
Первая строка ввода содержит \(N\).
Вторая строка ввода содержит \(N\) разделённых пробелом целых чисел,
\(p_1, p_2, p_3, \dots, p_N\), указывающих начальное размещение коров.
ФОРМАТ ВЫВОДА (файл sleepy.out):
Одно целое число - минимальное количество команд, которые должен дать ФД
чтобы отсортировать всех коров.
| |
|
|
Out of Sorts
Использование сортировки
реализация
Беси сделала гибрид из двух любимых алгоритмов
пузырьковой сортировки и быстрой сортировки:
Назовём позицию между элементами \(i\) и \(i+1\) массива \(A\) точкой разбиения
если максимум из \(A[...i]\) не больше чем минимум \(A[i+1 \ldots]\).
Беси помнит, что быстрая сортировка реорганизует массив так, чтобы у него
появилась точка разбиения, а затем рекурсивно сортирует две стороны
\(A[...i]\) и \(A[i+1 \ldots]\). Однако хотя она помнит, что все точки разбиения
можно найти за линейное время, она забыла как в быстрой сортировке
реорганизуется массив, чтобы быстро создать точку разбиения.
Она решила использовать пузырьковую сортировку для решения этой задачи
Ниже приведен алгоритм Беси
Сначала она написала простую функцию, которая делает один проход
пузырьковой сортировки:
bubble_sort_pass (A) {
for i = 0 to length(A)-2
if A[i] > A[i+1], swap A[i] and A[i+1]
}
Рекурсивный код Беси для "быстрой" сортировки такой:
quickish_sort (A) {
if length(A) = 1, return
do { // Main loop
work_counter = work_counter + length(A)
bubble_sort_pass(A)
} while (no partition points exist in A)
divide A at all partition points; recursively quickish_sort each piece
}
Теперь Беси интересно, насколько быстро работает её код.
Для простоты она считает, что её итерация работает линейно и поэтому она просто
инкрементирует глобальную переменную work_counter внутри цикла текущим
размером массива так, чтобы оценивать общую работу, выполненную алгоритмом.
По заданному входному массиву, предскажите финальное значение величины
work_counter после завершения алгоритма quickish_sort.
ФОРМАТ ВВОДА (файл sort.in):
Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100,000\)). Следующие
\(N\) строк описывают \(A[0] \ldots A[N-1]\), каждый из которых является
целым числом в интервале \(0 \ldots 10^9\). Не гарантируется, что все элементы
различны.
ФОРМАТ ВЫВОДА (файл sort.out):
Выведите конечное значение величины work_counter
| |
|
|
Rental Service
Жадный алгоритм
Использование сортировки
Задачи на моделирование
Чтобы увеличить свой доход, Фермер Джон организовал сервис по аренде коров.
У ФД есть \(N\) коров (\(1 \leq N \leq 100,000\)), каждая способна производить
некоторое количество молока каждый день. \(M\) магазинов (\(1 \leq M \leq 100,000\))
недалеко от фермы Джона покупают определённое количество молока, каждый по своей
цене. Более того, \(R\) (\(1 \leq R \leq 100,000\)) соседних фермеров заинтересованы
в аренде коров по некоторой цене.
ФД должен выбрать для каждой коровы, доить её самому или отдать в аренду
соседнему фермеру. Помогите ФД определить максимальное количество денег,
которое он может заработать за один день.
ФОРМАТ ВВОДА (файл rental.in):
Первая строка ввода содержит \(N\), \(M\), \(R\). Каждая из следующих \(N\) строк
содержит целое число \(c_i\) (\(1 \leq c_i \leq 1,000,000\)), указывающее, что
\(i\)-ая корова ФД может произвести \(c_i\) галлонов молока в день. Каждая
из \(M\) строк содержит два целых числа \(q_i\) и \(p_i\) (\(1 \leq q_i, p_i \leq 1,000,000\)),
которые обозначают, что \(i\)-ый магазин готов купить \(q_i\) галлонов молока
по \(p_i\) центов за галлон. Имейте ввиду, что ФД может продавать любое количество
молока от 0 до \(q_i\) галлонов в этот магазин. Каждая из следующих \(R\) строк
содержит целое число \(r_i\) (\(1 \leq r_i \leq 1,000,000\)), означающее, что один
из соседей ФД хочет арендовать корову за \(r_i\) центов в день.
ФОРМАТ ВЫВОДА (файл rental.out):
Вывод должен содержать одну строку - максимальную прибыль ФД, которую он может
получить за один день, доя или сдавая в аренду каждую из своих коров.
Заметим, что ответ может оказаться большим, чтобы поместиться в 32-битное целое,
поэтому Вы должны использовать тип как "long long" в C/C++.
| |
|
|
Out of Place
Использование сортировки
Фермер Джон решил сфотографировать всё свое стадо коров.
Для красоты ФД хочет построить своих коров в ряд по возрастанию роста.
К несчастью, сразу после того, как коровы выстроились в нужном порядке,
Беси вышла со своего места и стала на другое.
ФД хочет обменять пары коров, так чтобы снова стадо выстроилось в нужном порядке.
Определите минимальное количество обменов, которые должен сделать ФД,
чтобы вернуть порядок в строю коров.
ФОРМАТ ВВОДА (файл outofplace.in):
Первая строка ввода содержит \(N\) (\(2 \leq N \leq 100\)). Следующие \(N\) строк
описывают высоты коров как они стоят после того как Беси перешла. Каждая
высота - целое число в интервале \(1 \ldots 1,000,000\). Коровы могут иметь
одинаковую высоту.
ФОРМАТ ВЫВОДА (файл outofplace.out):
Выведите минимальное количество обменов между парами коров, которые должен
сделать ФД, чтобы снова все стояли по возрастанию высоты.
Не обязательно менять соседних коров.
| |
|
|
Convention
Бинарный поиск по ответу
Использование сортировки
Жадный алгоритм
На ферме Джона состоится съезд по поеданию травы.
Коровы со всего мира прибывают в местный аэропорт, чтобы посетить съезд
и поесть траву. А именно \(N\) (\(1 \leq N \leq 10^5\)) коров прибывают в
аэропорт, и корова \(i\) прибывает в момент времени \(t_i\) (\(0 \leq t_i \leq 10^9\)).
ФД организовал \(M\) (\(1 \leq M \leq 10^5\)) автобусов для транспортировки коров
из аэропорта. Каждый автобус может вместить до \(C\) (\(1 \leq C \leq N\)) коров.
ФД ждёт вместе с автобусами в аэропорту и собирается распределить прибывающих
коров по автобусам. Автобус убывает из аэропорта в момент, когда прибывает
последняя корова. ФД хочет, чтобы прибывающие коровы не ждали в аэропорту
слишком долго. Каково наименьшее значение максимального времени ожидания
из всех коров, если ФД оптимально назначит их по автобусам.
Время ожидания коровы есть разность между временем её прибытия и временем
отправления автобуса, в который она распределена.
Гарантируется, что \(MC \geq N\).
ФОРМАТ ВВОДА (файл convention.in):
Первая строка содержит три разделённых одиночными пробелами целых числа
\(N\), \(M\), \(C\). Следующая строка содержит \(N\) разделённых одиночными пробелами
целых чисел, представляющих время прибытия каждой коровы.
ФОРМАТ ВЫВОДА (файл convention.out):
Выведите одну строку, содержащую оптимальное минимальное максимальное время
ожидания для любой из прибывающих коров.
| |
|
|
Diamond Collector
Использование сортировки
Беси собрала \(N\) алмазов (\(N \leq 50,000\)) различных размеров.
И хочет разместить их в двух ящиках в амбаре.
Беси не будет включать в один ящик алмазы, если их размеры отличаются
более чем на \(K\).
По заданному \(K\) определите максимальное количество алмазов, которое
Беси сможет разместить в двух ящиках вместе.
ФОРМАТ ВВОДА (файл diamond.in):
Первая строка ввода содержит \(N\) и \(K\) (\(0 \leq K \leq 1,000,000,000\)).
Каждая из следующих \(N\) строк содержит целое число - размер одного
алмаза. Все размеры - положительные и не превышают \(1,000,000,000\).
ФОРМАТ ВЫВОДА (файл diamond.out):
Выведите одно положительное целое число, указывающее максимальное количество
алмазов, которое Беси может разместить в двух ящиках вместе.
| |
|
|
Diamond Collector
Использование сортировки
"Два указателя"
Беси собрала \(N\) алмазов (\(N \leq 1000\)) различных размеров.
И хочет разместить их специальным образом в амбаре.
Она не будет включать в размещение два алмаза, если их размеры отличаются
более чем на \(K\). По данному \(K\) определите максимальное количество алмазов,
которые Беси разместит в амбаре.
ФОРМАТ ВВОДА (файл diamond.in):
Первая строка ввода содержит \(N\) и \(K\) (\(0 \leq K \leq 10,000\)).
Каждая из следующих \(N\) строк содержит целое число, определяющее
размер одного из алмазов. Все размеры - положительные числа, не
превышающие \(10,000\)
ФОРМАТ ВЫВОДА (файл diamond.out):
Выведите одно положительное целое число - максимальное количество алмазов,
которое Беси сможет показать.
| |
|
|
Crowded Cows
Использование сортировки
N коров (1 <= N <= 50,000) Фермера Джона пасутся вдоль одномерного забора. Корова с номером I находится в точке x(i) и имеет высоту h(i) (1 <=x(i),h(i) <= 1,000,000,000). Корове «тесно», если имеется другая корова слева от нее на расстоянии ближе, чем её удвоенная высота внутри расстояния D и также другая корова справа от неё на расстоянии ближе чем её удвоенная высота внутри расстояния D (1 <= D <= 1,000,000,000). ФД хочет посчитать количество коров, которым тесно. Помогите ему. PROBLEM NAME: crowded Формат входных данных * Строка 1: Два целых числа, N и D. * Строки 2..1+N: Строка i+1 содержит целые числа x(i) и h(i). Расположения всех коров различны. Формат выходных данных * Строка 1: Количество коров, которым тесно. Примечание «Тесно» коровам в позициях x=5 и x=6.
| |
|
|
Cow Crossings
Использование сортировки
Каждый день N (1 <= N <= 100,000) коров Фермера Джона переходят дорогу, расположенную в середине фермы. Рассмотрим карту фермы Джона на 2D-плоскости, дорога идет горизонтально, одна сторона дороги описывается прямой y=0, другая - прямой y=1. Корова i пересекает дорогу, следуя по прямой из позиции (ai,0) на одной стороне в позицию (bi,1) на другой стороне. Все ai различны, так же как и все Bi. И все эти числа находятся в диапазоне -1,000,000...1,000,000. ФД называет переход безопасным, если он не пересекается никакими другими переходами. Помогите ФД подсчитать количество безопасных переходов. PROBLEM NAME: crossings Формат входных данных * Строка 1: Количество коров, N. * Строки 2..1+N: Строка i содержит целые числа ai и bi, описывающие путь коровы i. Формат выходных данных * Строка 1: Количество безопасных переходов. Примечание Переходы первой и третьей коров не пересекаются переходами никаких других коров. Переходы второй и четвертой коров пересекают друг друга.
| |
|
|
Cow Baseball
Бинарный поиск в массиве
Использование сортировки
N (3 <= N <= 1000) коров Фермера Джона стоят в ряд, каждая в различной позиции на числовой прямой. Они бросают друг другу мяч по кругу в порядке подготовки к важной игре с коровами с соседней фермы. ФД заметил, что группа из 3 коров (X,Y,Z) делает два успешных броска. Корова X бросает мяч вправо от себя корове Y, а затем корова Y бросает Мяч вправо от себя корове Z. ФД заметил также, что второй бросок получается на расстояние не менее чем первый бросок и не более чем в два раза превышает первый бросок. Посчитайте количество возможных троек коров, которые ФД мог наблюдать. PROBLEM NAME: baseball Формат входных данных * Строка 1: Количество коров, N. * Строки 2..1+N: Каждая строка содержит целую координату одной коровы (целое число в диапазоне 0..100,000,000). Формат выходных данных * Строка 1: Количество троек коров (X,Y,Z), где Y справа от X, а Z справа от Y и расстояние от Y до Z находится между XY и 2XY (включительно), где XY представляет расстояние от X до Y. Примечание Три возможных тройки: 1-3-7, 1-4-7, 1-4-10, 4-7-10.
| |
|
|
Haybale Stacking
Префиксные суммы(минимумы, ...)
Использование сортировки
Алгоритмы обработки
Беси согласилась помочь ФД уложить пакеты с сеном. Она начинает с N (1 <= N <= 1,000,000, N нечетное) пустых стеков, пронумерованных от 1 до N. Затем ФД дает ей последовательность из K инструкций (1 <= K <= 25,000), каждая вида A B, означающая, что Беси должна добавить по одному пакету с сеном в каждый из стеков в диапазоне от A до B. Например, инструкция 10 13 означает, что Беси должна положить по пакету сеном в стеки 10, 11, 12, 13. После того как вся работа закончена, ФД хочет узнать медианную высоту всех N своих стеков - то есть высоту среднего стека, если все стеки упорядочить по высоте. По условию N нечетно, поэтому этот стек уникален. Пожалуйста, помогите Беси ответить на этот вопрос. PROBLEM NAME: stacking Формат входных данных * Строка 1: Два разделенных пробелом целых числа, N K. * Строки 2..1+K: Каждая строка содержит одну инструкцию ФД в виде двух целых (разделенных пробелом) чисел A B (1 <= A <= B <= N).Формат выходных данных * Строка 1: Медианная высота после того как Беси выполнит все инструкции Примечание После того, как Беси закончит, стеки будут иметь высоты 0,1,2,3,3,1,0. Если их упорядочить, получим: 0,0,1,1,2,3,3. Средний элемент равен 1.
| |
|
|
Scrambled Letters
Использование сортировки
Фермер Джон поддерживает алфавитно упорядоченный список имен своих N (1 <= N <= 50,000) коров. Каждое имя коровы представлено уникальной строкой от 1 до 20 маленьких латинских символов. Беси, всегда создающая проблемы, переупорядочила имена коров в этом списке, и также поменяла буквы в некоторых именах. По заданному этому модифицированному списку определите для каждого имени в списке самую маленькую и самую большую позицию, которую могло занимать это имя в изначальном списке. PROBLEM NAME: scramble Формат входных данных * Строка 1: Одно целое число N. * Строки 2..1+N: Каждая из этиз строк содержит реорганизованное имя одной из коров Формат выходных данных * Строки 1..N: Строка i должна указывать, для входной строки i, самую маленькую и самую большую позицию в исходном списке на котором могла быть оригинальная версия строки i. Примечание Строка 'a' может быть только первой, а строка 'xyz' - только последней, вне зависимости как переупорядочены их буквы . Строки "essieb" и "elsie" могут занимать 2 или 3-ю позицию в зависимости от той буквы, которая была первой в оригинальном имени: например "bessie" (позиция 2) и "bessie" (позиция 3) и наоборот "sisbee" (позиция 3) и "ilees" (позиция 2)).
| |
|
|
Moo Sick
Использование сортировки
Поиск подстроки в строке
Problem 3: Moo Sick [Rob Seay] Каждый знает, что коровы любят слушать музыку. Великий композитор Мууцарт однажды открыл, некоторые последовательности нот действуют на коров угнетающе. Поэтому их нужно избегать во всех композициях для коров. Фермер Джон, не знакомый с этим фактом, решил проигрывать свою любимую песню через громкоговорители в амбаре. Ваша задача – определить все угнетающие последовательности нот в его песне, чтобы оценить, насколько она вредна для коров. Песня, которую озвучивает ФД, представляет собой последовательность из N нот, каждая в диапазоне от 1 до 88. Угнетающая последовательность состоит из С (1<=C<=10) различных нот, также целых чисел от 1 до 88. Однако, если ноты транспонированы (увеличены или уменьшены на одну и ту же величину), или переупорядочены, то эта последовательность нот все равно остается угнетающей. Например, если «4 6 7» - угнетающая последовательность нот, то последовательности «3 5 6» (транспонирована на -1), «6 8 9» (транспонирована на +2), «6 4 7» (переупорядочена), «5 3 6» (транспонирована и переупорядочена) , также являются угнетающими. Таким образом, угнетающей последовательностью нот являются C подряд идущих нот, удовлетворяющих вышеописанному критерию. Поэтому она однозначно определяется своим стартовым положением в песне. Определите стартовое положение всех угнетающих последовательностей. PROBLEM NAME: moosick Формат входных данных * Строка 1: Одно целое число: N. * Строки 2..1+N: N нот в песне ФД, по одной ноте на строке. * Строка 2+N: Одно целое число: C. * Строки 3+N..2+N+C: C нот определяющих угнетающую последовательность. Все транспозиции и переупорядочивания также угнетающие последовательности. Формат выходных данных * Строка 1: Количество, K, угнетающих последовательностей, которые есть в песне ФД. Заметим, что различные экземпляры угнетающих последовтельностей могут перекрываться друг с другом. * Строки 2..1+K: Каждая строка указывает начальную позицию угнетающей последовательности (1 – первая нота в песне ФД, N - последняя). Эти начальные позиции должны указываться в порядке возрастания. Примечание Две угнетающих последовательности встретились в песне ФД и они перекрываются в одной ноте. Первая – 8,5,7 (транспонирована на 1 и переупорядочена), начинается с позиции 2, а вторая 7,9,10 (транспонирована на 3) , начинается с позиции 4.
| |
|
|
Cow Photography
Использование сортировки
Фермер Джон хочет сделать фотографию коров, которые стоят в ряд. А они все время перемещаются. У ФД есть N (1 <= N <= 20,000) коров, каждая из которых имеет уникальный идентификатор - целое число. ФД хочет сфотографировать своих коров в особом порядке, который определяется содержимым массива A[1...N], где A[j] содержит ID j-ой коровы в правильном порядке. ФД выстраивает своих коров, но прежде чем он успеет нажать кнопку "зафиксировать фотографию", группа коров (необязательно непрерывная) переходит на множество новых позиций (также необязательно непрерывных). ФД опять их выстраивает в желанном порядке, а часть коров снова перед самы нажатием меняет свои позиции. Так продолжается 5 раз. Вам дается содержание каждой из этих 5 фотографий. Вы должны, если сможете, восстановить правильный порядок, заданныq массивом A. Каждая фотография задает порядок, который в нескольких позициях отличается от правильного порядка. На каждой фотографии некоторые коровы перешли на другие позиции. Однако каждая корова перешла на новую позицию не более чем в одной фотографии. Более того, могут быть фотографии, на которых ни одна корова не меняла свою позицию. PROBLEM NAME: photo Формат входных данных * Строка 1: Количество коров, N (1 <= N <= 20,000). * Строки 2..5N+1: Следующие 5N строк описывают пять упорядочиваний, каждое одним блоком из N строк. Каждая строка содержит ID коровы целое число в диапазоне от 0 до 1,000,000,000. Формат выходных данных * Строки 1..N: Запланированный порядок A, по одному ID в строке. Примечание Запланированный порядок A[1..5]: 10, 20, 30, 40, 50.
| |
|
|
Cow Photography
Использование сортировки
Фермер Джон хочет сделать фотографию коров, которые стоят в ряд. А они все время перемещаются. У ФД есть N (1 <= N <= 20,000) коров, каждая из которых имеет уникальный идентификатор - целое число. ФД хочет сфотографировать своих коров в особом порядке, который определяется содержимым массива A[1...N], где A[j] содержит ID j-ой коровы в правильном порядке. ФД выстраивает своих коров, но прежде чем он успеет нажать кнопку "зафиксировать фотографию", группа коров (необязательно непрерывная) переходит на множество новых позиций (также необязательно непрерывных). ФД опять их выстраивает в желанном порядке, а часть коров снова перед самы нажатием меняет свои позиции. Так продолжается 5 раз. Вам дается содержание каждой из этих 5 фотографий. Вы должны, если сможете, восстановить правильный порядок, заданныq массивом A. Каждая фотография задает порядок, который в нескольких позициях отличается от правильного порядка. На каждой фотографии некоторые коровы перешли на другие позиции. Однако каждая корова перешла на новую позицию не более чем в одной фотографии. Более того, могут быть фотографии, на которых ни одна корова не меняла свою позицию. PROBLEM NAME: photo Формат входных данных * Строка 1: Количество коров, N (1 <= N <= 20,000). * Строки 2..5N+1: Следующие 5N строк описывают пять упорядочиваний, каждое одним блоком из N строк. Каждая строка содержит ID коровы целое число в диапазоне от 0 до 1,000,000,000. Формат выходных данных * Строки 1..N: Запланированный порядок A, по одному ID в строке. Примечание Запланированный порядок A[1..5]: 10, 20, 30, 40, 50.
| |
|
|
Cow Photography (Bronze Level)
Использование сортировки
Problem XX: Cow Photography (Bronze) [Brian Dean, 2011] Фермер Джон хочет сделать фотографию всех коров, выстроенных в ряд, а они не стоят на месте. N (1 <= N <= 20,000) коров помечены номерами от 1 до N. ФД хочет сфотографировать их, стоящими в ряд в конкретном порядке, заданном массивом A[1..N], где a[j] содержит номер j-той коровы в этом порядке. ФД выстроил коров в этом порядке, но прежде чем он нажал на клавишу фотоаппарата "Сделать снимок", одна корова переместилась на новую позицию. Он снова поставил их в нужном порядке (указанном массивом A), Но снова перед нажатием кнопки уже другая корова переместилась на новую позицию. Так происходило 5 раз. Вам дано содержание каждой фотографии, Вы должны реконструировать содержимое массива A. На каждой из фотографий не более чем одна корова переместилась на новую позицию. Возможно, что ни одна корова не перемещалась. PROBLEM NAME: photo Формат входных данных * Строка 1: Количество коров, N (1 <= N <= 20,000). * Строки 2..5N+1: Следующие 5N строк описывают 5 порядков, каждый состоит из N последовательных строк. Каждая строка содержит номер коровы, целое число. Формат выходных данных * Строки 1..N: Исходный порядок коров в массиве A, по одному ID в строке. Примечание Правильный исходный порядок в массиве A[1..5]: 1, 2, 3, 4, 5.
| |
|
|
Хаос в библиотеке
Сортировка слиянием
Использование сортировки
В библиотеке произошёл полтергейст! Книги на полке перепутались. Библиотекарь хочет узнать, насколько сильно книги перепутаны.
Мера хаоса - это количество ИНВЕРСИЙ. Инверсия - это пара книг (i, j), где i < j, но книга i должна стоять ПОСЛЕ книги j (то есть номер книги i больше номера книги j).
Каждая книга имеет уникальный номер от 1 до N. Идеальный порядок: 1, 2, 3, ..., N.
Помогите библиотекарю подсчитать количество инверсий!
ВХОДНЫЕ ДАННЫЕ:
Первая строка: число N (1 ≤ N ≤ 100000) - количество книг.
Вторая строка: перестановка чисел от 1 до N - текущий порядок книг на полке.
ВЫХОДНЫЕ ДАННЫЕ:
Одно число - количество инверсий.
| |
|
|
65823
Использование сортировки
Разбор случаев
Аспирант Шлёпов собирается провести чемпионат вуза по шахматам. Так как игроков в вузе много, у сообщества есть свой рейтинг ELO. Шлёпов собирается разделить игроков на основании этого рейтинга на две лиги. В высшей лиге должно играть не менее трети игроков, но при этом наименьшее возможное количество; отбор в лигу идёт на основании ELO. Двух игроков с одинаковым ELO распределять в разные лиги нельзя. Высшая лига на турнире должна быть обязательно. Определите, начиная с какого ELO, игроки попадают в высшую лигу.
Формат входных данных
На вход программе в первой строке подаётся натуральное число N (N ≤ 1000) – количество игроков. Далее в N строках идёт по одному натуральному числу ki – рейтинг ELO игрока номер i (1 ≤ ki ≤ 2500).
Формат выходных данных
Выведите одно целое число – ELO, начиная с которого, игроки попадают в высшую лигу. Если в высшей лиге окажется весь турнир, надо вывести наименьший ELO среди заявленных игроков.
Пояснение
Всего пять игроков, значит, в высшей лиге должно быть не меньшедвух. 1750 – точно в высшей лиге. 1600 надо брать в высшую лигу, но их два. Значит, оба идутв высшую лигу, после чего она набрана.
| |
|
|
Беспилотная аэрологистика
Жадный алгоритм
Использование сортировки
Вывод формулы
На всероссийской олимпиаде по информатике 2224 года, которая проходит в Иннополисе, доставкой занимаются роботы нового поколения, которые способны создавать своих клонов. Доставку можно получить прямо через окно, не выходя из дома.
Изначально есть только один робот-доставщик. В любой момент верхний робот может создать одного или нескольких новых роботов прямо над собой. Так образуется колонна роботов. Высота каждого робота равна высоте одного этажа.

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

Во время перемещения конструкция из роботов может натолкнуться на препятствие. После препятствия движение продолжают только те экземпляры роботов, которые находились выше препятствия. Они оказываются на земле непосредственно за препятствием, по прежнему в виде вертикальной колонны, и могут продолжать движение, создавать новых клонов и доставлять заказы.

Расстояние между препятствиями и окнами достаточно большое, поэтому во время переезда через препятствие роботы не будут проезжать мимо окна.
За доставку одного заказа компания-организатор доставки получает \(p\) крипторублей. Стоимость создания одного нового робота равна \(c\) крипторублей. Итоговая прибыль равна суммарному доходу от доставки заказов за вычетом суммарной стоимости создания всех роботов. Компания хочет максимизировать свою прибыль. При этом, она не обязана выполнить все заказы, а роботы могут в любой момент остановиться, и прекратить процесс доставки.
Определите максимальную прибыль, которую может получить компания.
Формат входных данных
В первой строке входных данных находятся четыре целых числа \(n\), \(m\), \(c\), \(p\) (\(0 \le n, m \le 100\,000\), \(1 \le c, p \le 10^6\)) — количество препятствий, количество заказов в базе, стоимость создания клона робота и стоимость доставки одного заказа, соответственно.
В следующих \(n+m\) строках идёт описание препятствий и окон, в которые нужно доставить заказы, в порядке следования колонны роботов вдоль общежитий слева направо. Каждая строка содержит два целых числа \(t_i\) и \(h_i\) (\(1 \le t_i \le 2\), \(1 \le h_i \le 10^6\)) — тип объекта \(t_i\) (\(1\) для препятствия и \(2\) для окна) и \(h_i\) "— высота препятствия в этажах или этаж, на котором находится окно.
Гарантируется, что ровно \(n\) объектов имеют тип \(1\), и оставшиеся \(m\) объектов имеют тип \(2\).
Формат выходных данных
Выведите одно число — максимальную величину прибыли, которую можно получить.Одна из оптимальных стратегий доставки заказов из первого примера изображена на девяти рисунках ниже, при этом выполнение второго заказа не увеличивает прибыль.
Пояснения к примерам
Одна из оптимальных стратегий доставки заказов из первого примера изображена на девяти рисунках ниже, при этом выполнение второго заказа не увеличивает прибыль.

Во втором примере достаточно один раз клонировать робота для доставки первого заказа, полученной системой роботов доставить второй заказ, а производить дополнительное клонирование для доставки третьего заказа экономически невыгодно.
| |
|
|
Последовательность Трёх Сил
Использование сортировки
Простые числа и разложение на множители
Старец Летовец, известный своими суперскиллами, решил научить своих учеников создавать "Последовательность Трёх Сил". Он дал им список чисел и сказал: "Отсортируйте эти числа так, чтобы они образовали Последовательность Трёх Сил. Вот правила:"
-
Сила Тройки. Числа, которые делятся на 3, должны идти первыми.
-
Сила Порядка. Среди чисел, делящихся на 3, меньшие числа должны идти перед большими.
-
Сила Простоты. Среди чисел, не делящихся на 3, числа имеющие большее количество делителей должны идти раньше, чем числа имеющие меньшее количество делителей. При равном числе делителей, числа должны идти в порядке убывания.
Напишите программу, которая реализует это правило, и создаёт Последовательность Трёх Сил из любого списка целых чисел.
Формат входных данных
В первой строке записано натуральное число n (n <= 105) - количество целых чисел в списке. Далее, в n строках записано по одному целому числу numi ( -105 <= numi <= -105).
Формат выходных данных
Выведите в одной единственной строке Последовательность Трёх Сил, составленную из исходного списка чисел.
| |
|
|
Конвейер
Стек
Использование сортировки
Для транспортирования материалов из цеха А в цех В используется конвейер. Материалы упаковываются в одинаковые контейнеры и размещаются на ленте один за одним в порядке изготовления в цехе А. Каждый контейнер имеет степень срочности обработки в цехе В. Для упорядочивания контейнеров по степени срочности используют накопитель, который находится в конце конвейера перед входом в цех В. Накопитель работает пошагово, на каждом шаге возможны следующие действия:
накопитель перемещает первый контейнер из ленты в цех В;
накопитель перемещает первый контейнер из строки в склад (в складе каждый следующий контейнер помещается на предыдущий);
накопитель перемещает верхний контейнер из склада в цех В.
Написать программу, которая по последовательности контейнеров определит, можно ли упорядочить их по степени срочности пользуясь описанным накопителем.
Входные данные
Первая строке содержит количество тестов N. Далее следует N строк, каждый из которых описывает отдельный тест и содержит целое число K (1≤ K ≤ 10000) — количество контейнеров в последовательности и K действительных чисел — степеней срочности контейнеров в порядке их поступления из цеха А (меньшим числам соответствует большая степень срочности).
Выходные данные
Каждая строка должна содержать ответ для одного теста. Необходимо вывести 1, если необходимое упорядочивание возможно, или 0 в противном случае.
| |
|
|
Оладьи
Использование сортировки
реализация
Имеется стопка оладий. Необходимо сделать из них правильную стопку: каждая оладья должна быть не больше всех оладий, находящихся под нею. Все оладьи круглые, поэтому размер оладьи определяется ее диаметром.
Сортировка стопки осуществляется серией “переворотов” оладий. Переворот заключается в том, что вы помещаете лопатку между двумя оладьями и переворачиваете всю стопку, оказавшуюся на лопатке, то есть меняете порядок следования оладий над лопаткой на обратный.
Стопка определяется заданием диаметра каждой оладьи в стопке в порядке следования (сверху вниз). Переворачивание определяется количеством оладий, которое переворачивается. Например, из стопки 7 3 9 1 5 переворачиванием трех оладий получится стопка 9 3 7 1 5.
Вам дана стопка оладий, выведите последовательность переворачиваний (то есть количество оладий, которое нужно переворачивать за один раз), сортирующую данную стопку.
Входные данные
Первая строка входных данных содержит натуральное число N (1 ≤ N ≤ 1000) – количество оладий в стопке. Далее идет N натуральных чисел, не превосходящих 109 – размеры оладий в стопке (сверху вниз).
Выходные данные
Ваша программа должна вывести последовательность натуральных чисел, не превосходящих N, соответствующую количеству оладий, которое необходимо переворачивать для правильной сортировки стопки.
| |
|
|
Боря сортирует матрицу
Использование сортировки
Алгоритмы обработки
Назовем таблицу из N x M чисел отсортированной, если любое число в таблице не меньше каждого из чисел, стоящих одновременно выше и левее данного числа (см. пример). Дана таблица чисел. Требуется переставить числа так, чтобы таблица оказалась отсортированной. Если способов несколько, нужно привести любой из них.
Входные данные
Вводятся сначала два числа N и M (натуральные, не превосходящие 30), а затем N строк по M разделенных пробелами чисел в каждой. Числа целые и не превышают по модулю 10000.
Выходные данные
Вывести N строк по M разделенных пробелами чисел в каждой строке.
| |
|
|
Очередь за комплексом
Жадный алгоритм
Использование сортировки
реализация
Федок очень хочет купить себе комплексный обед в столовой, но сделать это не так просто. В столовой работает всего одна касса, и то очень медленно. На данный момент в очереди находится \(n\) \((2 \leq n \leq 100\,000)\) людей, а сам Федок находится на \(k-\)ой \((1 \leq k \leq n)\) позиции в ней. И вот, чтобы занять себя в этой очереди, Федок стал обдумывать коварный план как побыстрее оплатить комплексный обед и начать есть.
В чем состоит коварный план? Федок хочет крикнуть, что открылась новая касса. Тогда, по его мнению, многие уйдут из очереди в поисках этой кассы, а он приблизится к заветной еде. Но вот в чем проблема: не все люди так нетерпеливы как наш герой. Проще говоря, у каждого человека есть свой параметр \(P_i\) — терпеливость. Если человек стоит на позиции \(x\) и его терпеливость равна \(y\), то он уйдет искать новую кассу только в том случае, если \(y < x\)
Казалось бы, эта задача трудна, но и Федок не глуп. Он своим метким взором определил терпеливости всех людей, стоящих в очереди кроме него. Увы, так как людей очень много, в его голове все перепуталось, и некоторые числа поменялись местами. Таким образом наш герой получил некоторую перестановку множества терпеливости всех людей в очереди \(P_1, P_2, \ldots, P_{n-1}\)
Федок не знает точно, кто насколько терпелив и боится, что не сдвинется в очереди после реализации своей задумки. Поэтому он просит вас помочь ему узнать, какую минимальную и максимальную позицию от начала очереди он может занимать после того как крикнет: <<Свободная касса!>>
Формат входных данных
В первой строке входных данных находится число людей в очереди \(n\) (\(2 \leq n \leq 100\,000\))
Во второй строке находится число \(k\) (\(1 \leq k \leq n\)) — текущая позиция Федка в очереди
В следующей строке содержатся \(n-1\) число — перестановка множества терпеливостей людей в очереди \((0 \leq P_i \leq n)\)
Формат выходных данных
В первой строке выведите минимальное место, которое может стать у Федка после применения его плана
Во второй строке выведите максимальное место, которое может стать у Федка после применения его плана
-
Решения, работающие для \(n \leq 10\) будут набирать не менее 5 баллов
-
Решения, работающие для \(n \leq 1000\) будут набирать не менее 10 баллов
Замечание
Пояснение к первому тесту:
Алексей стоит на второй позиции. Перед ним один человек.
Если его терпеливость будет равна нулю, то он уйдет, и Федок станет первым
Если же его терпеливость равна трем, то он не уйдет, и Федок останется второй
| |
|
|
Сортировка дробей
Бинарный поиск по ответу
Использование сортировки
"Два указателя"
На доске выписано две последовательности из \(n\) различных целых чисел: \(A = [a_1, a_2, \ldots, a_n]\) и \(B = [b_1, b_2, \ldots, b_n]\).
Составим из них \(n^2\) дробей вида \(a_i / b_j\), сократим каждую дробь и отсортируем их по неубыванию.
Задано число \(q\) и \(q\) целых чисел \(c_1, c_2, \ldots, c_q\). Для каждого \(j\) следует выдать \(c_j\)-ю в неубывающем порядке дробь из получившихся.
Формат входных данных
На первой строке ввода находятся числа \(n\) и \(q\) (\(1 \le n \le 10^5\), \(1 \le q \le 10^5\), \(q \le n^2\)).
Дополнительно выполняется неравенство \(n\cdot q \le 10^5\).
На второй строке ввода находятся \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)).
На третьей строке ввода находятся \(n\) различных целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^6\)).
На четвертой строке ввода находятся \(q\) различных целых чисел \(c_1, c_2, \ldots, c_q\) (\(1 \le c_i \le n^2\)).
Формат выходных данных
Выведите \(q\) строк. На \(j\)-й строке выведите \(c_j\)-ю по неубыванию дробь среди получившихся. Дробь \(p/q\) следует выводить в формате <<p q>>, дробь должна быть несократимой.
Замечание
В примере дроби исходно равны: \[\left[ \frac{3}{2}, \frac{3}{3}, \frac{3}{4}, \frac{3}{5}, \frac{4}{2}, \frac{4}{3}, \frac{4}{4}, \frac{4}{5}, \frac{1}{2}, \frac{1}{3}, \frac{1}{4}, \frac{1}{5}, \frac{2}{2}, \frac{2}{3}, \frac{2}{4}, \frac{2}{5} \right],\] после сокращения \[\left[ \frac{3}{2}, \frac{1}{1}, \frac{3}{4}, \frac{3}{5}, \frac{2}{1}, \frac{4}{3}, \frac{1}{1}, \frac{4}{5}, \frac{1}{2}, \frac{1}{3}, \frac{1}{4}, \frac{1}{5}, \frac{1}{1}, \frac{2}{3}, \frac{1}{2}, \frac{2}{5} \right],\] после сортировки \[\left[ \frac{1}{5}, \frac{1}{4}, \frac{1}{3}, \frac{2}{5}, \frac{1}{2}, \frac{1}{2}, \frac{3}{5}, \frac{2}{3}, \frac{3}{4}, \frac{4}{5}, \frac{1}{1}, \frac{1}{1}, \frac{1}{1}, \frac{4}{3}, \frac{3}{2}, \frac{2}{1} \right].\]
| |
|
|
Два подарка
"Два указателя"
Использование сортировки
Сеня выбирает себе подарки на новый год. Он знает, что Дед Мороз купит ему ровно два подарка: один якобы от мамы, а другой якобы от папы.
В магазине, где Дед Мороз будет покупать подарки, продаётся \(n\) подарков, про каждый подарок известна его цена: цена \(i\)-го подарка равна \(a_i\) рублей. Сеня знает, что Дед Мороз может потратить на покупку его подарков не больше \(x\) рублей. Разумеется, он хочет получить как можно более дорогие подарки. Таким образом, он хочет выбрать два различных подарка с максимальной суммарной ценой, но при этом она не должна превышать \(x\).
Помогите Сене выбрать себе подарки.
Формат входных данных
Первая строка ввода содержит два целых числа: \(n\) и \(x\) (\(2 \le n \le 100\,000\), \(2 \le x \le 10^9\)). Вторая строка ввода содержит \(n\) целых чисел: \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)). Гарантируется, что существует два подарка с суммарной ценой не больше \(x\).
Формат выходных данных
Выведите одно целое число: максимальную суммарную цену двух различных подарков, не превышающую \(x\).
| |
|
|
Необычный массив
Дерево отрезков, RSQ, RMQ
Использование сортировки
реализация
У Васи есть массив, состоящий из \(n\) чисел \(a_1, a_2, \ldots, a_n\). Для каждой позиции \(i\) и для каждого подотрезка массива \([l, r]\), который содержит позицию \(i\) (то есть, \(1 \le l \le i \le r \le n\)), Вася вычисляет значение \(c_{i, l, r}\) следующим образом. Вася выписывает на листочек числа из массива с позиции \(l\) до позицию \(r\), всего \(len=r-l+1\) чисел (среди которых обязательно есть \(a_i\)), и сортирует выписанные числа по возрастанию. После чего Вася находит, на какой позиции \(j\) в полученном отсортированном массиве стоит число \(a_i\). Если таких позиций несколько, то среди них он выбирает ту, которая максимизирует расстояние от середины массива — позиции \(mid = \lceil (len+1) / 2 \rceil\) (\(len / 2 + 1\) в случае четного \(len\) и \((len+1)/2\) в случае нечетного \(len\)). Полученное расстояние \(|j - mid|\) и есть искомая величина \(c_{i,l,r}\).
Например, если у Васи был массив \(a=\{5,1,3,2,1,7\}\), а \(i=2\), \(l=2\), \(r=5\), то Вася выпишет на листочек числа \(\{1,3,2,1\}\), отсортирует их и получит массив \(\{1,1,2,3\}\), длина которого равна 4. Середина этого массива находится на позиции \(4/2+1=3\), а искомое число \(a_i=1\) стоит в этом массиве на позициях 1 и 2. Среди этих двух позиций Вася выбирает ту, которая дальше от середины, то есть, позицию 1. Искомая разность между позициями равна 2, и это и есть значение \(c_{2,2,5}\).
Для каждой позиции \(i\) Вася вычисляет величину \(b_i\), которая равна максимуму среди значений \(c_{i,l,r}\) среди всех подотрезков, содержащих позицию \(i\).
Как вы видите, определение числа \(b_i\) достаточно сложное. Помогите Васе вычислить значения \(b_i\) для всех позиций массива.
Формат входных данных
В первой строке входных данных находится одно целое число \(n\) (\(1 \le n \le 200\,000\)) — размер массива Васи.
Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива.
Формат выходных данных
В единственной строке выведите \(n\) чисел, \(i\)-е из них должно быть равно \(b_i\).
Примечание
Разберем подробнее первый пример.
-
Для первой позиции Вася рассмотрит все подотрезки, содержащие эту позицию, в частности, подотрезок \([1,5]\), где \(l=1\) и \(r=5\). Для вычисления \(c_{i,l,r}=c_{1,1,5}\) Вася выпишет числа \(\{5, 4, 3, 2, 1\}\) и после сортировки получит \(\{1, 2, 3, 4, 5\}\). Середина этого массива находится на позиции 3, а искомое число \(a_1=5\) — на позиции 5. Таким образом, \(c_{1,1,5}=2\). Нетрудно заметить, что это число — максимальное среди всех подотрезков, содержащих позицию 1, а значит, \(b_1=2\).
-
\(b_2=c_{2,2,4}\).
-
\(b_3=c_{3,3,5}\).
-
\(b_4=c_{4,1,4}\). Действительно, если выписать числа на подотрезке \([1,4]\), то получится массив \(\{5,4,3,2\}\), который после сортировки превратится в \(\{2,3,4,5\}\). Середина этого массива находится на позиции \(3\), а искомый элемент \(a_4=2\) — на позиции 1. Таким образом, \(c_{4,1,4}=2\).
-
\(b_5=c_{5,1,5}\).
| |
|
|
Дроби
Арифметические алгоритмы (Теория чисел)
Использование сортировки
Найдите и выведите в возрастающем порядке все несократимые обыкновенные дроби \(f\) со знаменателем не превышающим \(n\), которые удовлетворяют неравенству \(1/p < f < 1/q\).
Формат входных данных
На ввод подается три числа: \(n\), \(p\) и \(q\) (\(1 \le n \le 100\), \(1 \le q < p \le 100\)).
Формат выходных данных
Выведите все искомые дроби, по одной на строке.
| |
|
|
Цветочный магазин
Бинарный поиск по ответу
Использование сортировки
Префиксные суммы(минимумы, ...)
Петя открыл цветочный магазин. Магазин Пети занимается изготовлением и продажей букетов. Всего существует \(n\) видов цветов, занумерованных от 1 до \(n\). Каждый букет, чтобы быть гармоничным и красивым, должен состоять из цветов всех видов, по одной штуке каждого вида. В магазине уже есть \(a_i\) штук цветов вида \(i\). На цветочной базе можно купить цветок любого вида за 1 рубль.
Определите, сколько букетов сможет собрать Петя, если потратит не более \(x\) рублей на покупку цветов на базе. Ответьте на \(q\) запросов с различными \(x_i\).
Формат входных данных
В первой строке входных данных находятся два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)) — количество различных типов цветов и количество запросов.
Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \cdots, a_n\) (\(0 \le a_i \le 10^9\)) — количество цветов каждого вида, имеющихся в магазине.
В третьей строке находятся \(q\) целых чисел \(x_1, x_2, \cdots, x_q\) (\(0 \le x_i \le 10^9\)) — запросы Пети.
Формат выходных данных
Выходной файл должен содержать \(q\) чисел, где \(i\)-е число это максимальное количество букетов, которое можно собрать потратив не более \(x_i\) рублей.
Примечание
В первом примере у Пети изначально есть 1 цветок первого типа и 0 цветов второго типа.
В первом запросе у него есть 1 рубль, он покупает цветок второго типа и делает 1 букет.
Во втором запросе у него есть 2 рубля, он не может сделать два букета за 2 рубля, поэтому ответ по прежнему 1.
В третьем запросе у него есть 5 рублей, он покупает 2 цветка первого типа и 3 цветка второго типа и делает 3 букета.
| |
|
|
Есть n стульев...
Бинарный поиск по ответу
Использование сортировки
Сортировка событий
Влад наконец-то достиг позиции тимлида в команде, но теперь у него совсем нет времени на дорогу домой, и ему придется спать в офисе. К сожалению, не все IT-компании могут позволить себе просторный и удобный коворкинг, в котором можно подремать, поэтому Влад будет спать на офисных стульях.
В офисе есть \(n\) стульев, \(i\)-й из которых имеет высоту \(h_i\) и ширину \(w_i\). Влад планирует выбрать любой набор офисных стульев \([i_1, i_2, \ldots, i_k]\) и расположить в ряд, чтобы на них можно было лечь. Рост Влада равен \(H\), поэтому, чтобы он мог удобно лежать, необходимо, чтобы суммарная ширина выбранных стульев была не меньше \(H\), то есть \[\sum\limits_{j=1}^k w_{i_j} \ge H \text{.}\]
Очевидно, что спать на стульях разной высоты неудобно. Назовем неудобностью выбранного набора максимальную разность высот двух соседних стульев в ряду, то есть \(\max\limits_{j=2}^k |h_{i_j} - h_{i_{j-1}}|\). Если набор состоит из одного стула, его неудобность равна \(0\).
Помогите Владу выбрать набор стульев так, чтобы на ряду из них можно было лежать, а неудобность этого ряда была как можно меньше.
Формат входных данных
В первой строке ввода через пробел даны два целых числа \(n\) и \(H\) — количество стульев и рост Влада (\(1 \le n \le 2 \cdot 10^5\); \(1 \le H \le 10^9\)).
Во второй строке ввода через пробел перечислены \(n\) целых чисел \(h_i\) — высоты стульев (\(1 \le h_i \le 10^9\)). В третьей строке в том же формате перечислены \(n\) целых чисел \(w_i\), равных ширине стульев (\(1 \le w_i \le 10^9\)).
Гарантируется, что \(H\) не превосходит суммы всех \(w_i\).
Формат выходных данных
Выведите единственное число — минимальное возможное неудобство среди всех подходящих наборов.
Замечание
В первом примере нужно выставить стулья \(2\) и \(4\) в любом порядке.
Во втором примере можно выбрать, например, следующие наборы: \([1, 5]\), \([2, 4, 3]\). Обратите внимание, что порядок стульев в наборе важен: неудобность набора \([2, 3, 4]\) равна \(\max(|5 - 3|, |4 - 5|) = \max(2, 1) = 2\), что больше, чем для набора \([2, 4, 3]\).
| |
|
|
Сортировка по максимальному элементу в строке - 2
Квадратичные сортировки
Использование сортировки
сортировки
Напишите программу, которая переставляет строки матрицы так, чтобы при их просмотре сверху вниз максимальные значения в каждой строке образовали невозрастающую последовательность. В случае равенства максимальных значений в двух строках, строки должны следовать в том же порядке, что и в исходной матрице.
Формат входных данных
В первой строке записаны два числа N и M - количество строк и столбцов матрицы соответственно (1 <= N, M <= 50 ). В следующих N строках записаны строки матрицы, в каждой – по M натуральных чисел, разделённых пробелами.
Формат выходных данных
Программа должна вывести получившуюся матрицу.
| |
|
|
Сортировка по сумме строк - 2
Квадратичные сортировки
Использование сортировки
сортировки
Напишите программу, которая переставляет строки матрицы так, чтобы при их просмотре сверху вниз суммы всех значений в каждой строке образовали невозрастающую последовательность. В случае равенства суммы всех значений в двух строках, строки должны следовать в том же порядке, что и в исходной матрице.
Формат входных данных
В первой строке записаны два числа N и M - количество строк и столбцов матрицы соответственно (1 <= N, M <= 50 ). В следующих N строках записаны строки матрицы, в каждой – по M натуральных чисел, разделённых пробелами.
Формат выходных данных
Программа должна вывести получившуюся матрицу.
| |
|
|
Ханойская фабрика
Жадный алгоритм
Использование сортировки
реализация
Наверняка вы слышали об известной задаче про Ханойские башни, но мало кто знает, что существует целая фабрика, производящая кольца для этой замечательной игры. Однажды на эту фабрику пришел срочный заказ от властителя Египта — Солнцеликого. Солнцеликий требует немедленно прислать ему для игры как можно более высокую башню. Работники фабрики не были готовы к такому необычному заказу, поэтому им придётся собрать какую-то башню из уже произведённых колец.
На складах фабрики находятся \(n\) колец, \(i\)-е кольцо имеет внутренний радиус \(a_i\), внешний радиус \(b_i\) и высоту \(h_i\). Требуется выбрать некоторые из этих колец и упорядочить их таким образом, чтобы выполнялись следующие условия:
-
Внешние радиусы колец образовывали невозрастающую последовательность, то есть кольцо \(j\) можно поставить на кольцо \(i\) только если \(b_j \leq b_i\).
-
Кольца не должны проваливаться друг в друга, то есть кольцо \(j\) можно поставить на кольцо \(i\) только если \(b_j > a_i\).
-
Суммарная высота всех использованных колец должна быть максимальна.
Формат входных данных
В первой строке входных данных записано целое число \(n\) (\(1 \leq n \leqslant 100\,000\)) — количество колец на складах фабрики.
В \(i\)-й из последующих \(n\) строк записаны три числа \(a_i\), \(b_i\) и \(h_i\) (\(1 \leq a_i, b_i, h_i \leq 10^9\), \(b_i > a_i\)) — внутренний радиус, внешний радиус и высота \(i\)-го кольца соответственно.
Формат выходных данных
Выведите максимальную высоту башни, которую смогут получить работники фабрики.
Замечание
В первом примере выгодно поставить друг на друга все имеющиеся кольца в порядке \(3\), \(2\), \(1\).
Во втором примере можно либо поставить кольцо \(3\) на кольцо \(4\) и получить башню высоты \(3\), либо поставить кольцо \(1\) на кольцо \(2\) и получить башню высоты \(4\).
В данной задаче 50 тестов, помимо тестов из условия, каждый из них оценивается в 2 балла. Результаты работы ваших решений на первых 30 тестах будут доступны во время соревнования. Результаты работы на остальных 20 будут доступны после окончания соревнования.
Решение, корректно работающие при \(1 \leq n \leq 9\), наберут не менее \(10\) баллов.
Решение, корректно работающие при \(1 \leq n \leq 15\), наберут не менее \(20\) баллов.
Решение, корректно работающие при \(1 \leq n \leq 1000\), наберут не менее \(60\) баллов.
| |
|
|
Парковка - 2
Жадный алгоритм
Использование сортировки
Специально для \(n\) сотрудников ИТМО, пользующихся личными автомобилями, планируется открыть парковку. На парковке должно быть ровно \(n\) парковочных мест, каждому сотруднику должно достаться свое место.
Для экономии мест парковка будет разбита на несколько <<рядов>>. Места в каждом ряду нумеруются от \(1\) (самое дальнее от въезда) до длины ряда (самое ближнее ко въезду), и дальние места недоступны, пока не освободятся все более ближние.
Для каждого сотрудника известно, в какое время он приезжает, и в какое время заканчивает работу. Так как сотрудники ИТМО — очень трудолюбивые люди, каждый из них приезжает на работу в один день, а уезжает уже в следующий. Для каждого известно время, в которое он приезжает на работу \(t^\mathrm{in}_i\), и время, в которое он уезжает на следующий день \(t^\mathrm{out}_i\). Требуется назначить места сотрудникам так, чтобы никому из них не понадобилось ждать
-
появления доступного парковочного места, когда он приезжает;
-
возможности выехать, когда он заканчивает работу.
Более формально, если сотрудникам \(i\) и \(j\) назначены места \(p_i\) и \(p_j\) в одном ряду, и \(p_i < p_j\), должно выполняться \(t^\mathrm{in}_i \le t^\mathrm{in}_j\) и \(t^\mathrm{out}_i \ge t^\mathrm{out}_j\).
Определите, какое минимальное число рядов понадобится, чтобы можно было распределить всех сотрудников по местам на парковке указанным образом, и найдите соответствующее распределение сотрудников по местам.
Формат входных данных
В первой строке ввода дано единственное целое число \(T\) — количество наборов входных данных (\(1 \le T \le 100\)). Далее следуют описания наборов входных данных.
В первой строке описания набора входных данных дано единственное целое число \(n\) — количество сотрудников, которых необходимо разместить на парковке.
Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).
В следующих \(n\) строках перечислены времена въезда и выезда для каждого сотрудника, в \(i\)-й строке через пробел \(t^\mathrm{in}_i\) и \(t^\mathrm{out}_i\) (\(1 \le t^\mathrm{in}_i, t^\mathrm{out}_i \le 10^9\)).
Формат выходных данных
Выведите ответ на задачу для каждого набора входных данных в том порядке, в котором они перечислены во вводе.
В первой строке выведите число \(k\) — минимальное необходимое количество рядов.
В \(i\)-й из следующих \(n\) строк выведите через пробел сначала номер ряда, а затем номер места в этом ряду, которое надо отдать \(i\)-му сотруднику. Ряды и места нумеруются с единицы.
Если существует несколько различных ответов, минимизирующих \(k\), выведите любой из них.
| |
|
|
Парковка
Сортировка событий
Использование сортировки
Специально для \(n\) сотрудников ИТМО, пользующихся личными автомобилями, планируется открыть парковку. На парковке должно быть ровно \(n\) парковочных мест, каждому сотруднику должно достаться свое место.
Для экономии мест парковка будет разбита на несколько <<рядов>>. Места в каждом ряду нумеруются от \(1\) (самое дальнее от въезда) до длины ряда (самое ближнее ко въезду), и дальние места недоступны, пока не освободятся все более ближние.
Для каждого сотрудника известно, в какое время он приезжает, и в какое время заканчивает работу. Так как сотрудники ИТМО — очень трудолюбивые люди, каждый из них приезжает на работу в один день, а уезжает уже в следующий. Для каждого известно время, в которое он приезжает на работу \(t^\mathrm{in}_i\), и время, в которое он уезжает на следующий день \(t^\mathrm{out}_i\). Требуется назначить места сотрудникам так, чтобы никому из них не понадобилось ждать
-
появления доступного парковочного места, когда он приезжает;
-
возможности выехать, когда он заканчивает работу.
Более формально, если сотрудникам \(i\) и \(j\) назначены места \(p_i\) и \(p_j\) в одном ряду, и \(p_i < p_j\), должно выполняться \(t^\mathrm{in}_i < t^\mathrm{in}_j\) и \(t^\mathrm{out}_i > t^\mathrm{out}_j\).
Определите, какое минимальное число рядов понадобится, чтобы можно было распределить всех сотрудников по местам на парковке указанным образом, и найдите соответствующее распределение сотрудников по местам.
Формат входных данных
В первой строке ввода дано единственное целое число \(T\) — количество наборов входных данных (\(1 \le T \le 100\)). Далее следуют описания наборов входных данных.
В первой строке описания набора входных данных дано единственное целое число \(n\) — количество сотрудников, которых необходимо разместить на парковке.
Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).
Во второй строке набора входных данных через пробел перечислены \(n\) целых чисел \(t^\mathrm{in}_i\) — времена приезда сотрудников на работу (\(1 \le t^\mathrm{in}_i \le 10^9\)). В третьей строке в том же формате перечислены \(n\) целых чисел \(t^\mathrm{out}_i\) — времена отъезда сотрудников (\(1 \le t^\mathrm{out}_i \le 10^9\)).
Формат выходных данных
Выведите ответ на задачу для каждого набора входных данных в том порядке, в котором они перечислены во вводе.
В первой строке ответа выведите единственное целое число \(k\) — минимальное необходимое количество рядов. В \(i\)-й из следующих \(k\) строк выведите описание \(i\)-го ряда: первое число в строке \(\mathrm{cnt}_i\) должно быть равно количеству мест в ряду, после чего должны следовать \(\mathrm{cnt}_i\) целых чисел от \(1\) до \(n\) — номера сотрудников, занимающих места этого ряда, в порядке от самого глубокого к самому ближнему ко въезду.
Если существует несколько различных ответов, минимизирующих \(k\), выведите любой из них.
| |
|
|
2022
Использование сортировки
Алгоритмы обработки
Бинарный поиск в массиве
Эвелине на Новый год подарили массив a из n неотрицательных целых чисел, каждое из которых не превосходит 2022. Её заинтересовал вопрос, сколько в этом массиве существует различных пар индексов, у которых первый индекс в паре меньше второго, таких, что сумма соответствующих элементов массива равна 2022. Формально, она хочет понять, сколько существует пар 1 <= i,j <= n, для которых выполняется ai+aj=2022.
Уже наступил февраль, а Эвелина все еще не успела посчитать ответ на вопрос, потому что массив слишком большой. Но она смогла запомнить его и рассказала о своем массиве вам, чтобы получить помощь с поиском ответа.
Входные данные
В первой строке содержится одно целое число n (1 <= n <= 100000) - количество элементов массива. Во второй строке заданы n целых чисел a1, a2, ..., an (0 <= ai <= 2022) - элементы массива Эвелины.
Выходные данные
Выведите одно число - количество подходящих пар.
Примечание
В первом примере не существует пар с суммой 2022.
Во втором подходят пары (1, 2), (3, 4).
В третьем примере подходят все пары (2, 4), (2, 5), (3, 4), (3, 5).
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
2
1 2022
|
0
|
| 2 |
4
1000 1022 1001 1021
|
2
|
| 3 |
5
700 1 1 2021 2021
|
4
|
| |
|
|
Любимый фрукт
Словари
Использование сортировки
У всех жителей Цветочного города спросили его любимый фрукт. Определите самый любимый фрукт среди всех жителей Цветочного города.
Входные данные
Программа получает на вход текст (количество строк может быть много). Текст заканчивается строкой END!.
Выходные данные
Выведите любимый фрукт среди всех жителей Цветочного города. Если таких фруктов несколько, выведите тот, который меньше в лексикографическом порядке.
Пример
| № |
Входные данные |
Выходные данные |
| 1 |
apple orange banana banana orange
END! |
banana |
| |
|
|
Минимальное произведение
Использование сортировки
Линейные алгоритмы
Дана последовательность из N целых чисел (они могут быть положительными, отрицательными или равными 0). Необходимо выбрать из этих чисел два числа так, чтобы их произведение было как можно меньшим (не рассматриваются квадраты данных чисел, но можно выбрать произведение двух различных элементов последовательности, равных друг другу).
В первой строке входных данных записано целое число N, 2 ≤ N ≤105 – количество данных чисел. Следующие N строк содержат сами числа, не превосходящие по модулю 40 000.
Программа должна вывести единственное целое число – наименьшее возможное произведение двух различных элементов этой последовательности.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3
1
-3
2 |
-6 |
| |
|
|
Единицы
Алгоритмы обработки
Использование сортировки
В числе подсчитали количество единиц, в получившемся опять подсчитали количество единици т.д.
Например: 111211121112111 - 12 - 1 - 1 - 1 - ...
В итоге полученная последовательность стабилизировалась. На каком числе?
Например, последовательность 111211121112111 - 12 - 1 - 1 - 1 - ... стабилизировалась на числе 1.
Входные данные
Вводится одно натуральное число, состоящее из не более чем 100 цифр.
Выходные данные
Выведите число, на котором стабилизировалась последовательность.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
12345 |
1 |
| 2 |
2007 |
0 |
| |
|
|
Напитки и стаканы - 2
Комбинаторика
Использование сортировки
К Коле на день рождения придут n друзей.
По этому случаю он заготовил n бутылок различных напитков, а каждый из друзей принесет свой стакан.
Коля знает размеры стаканов каждого друга, однако, может случится так, что содержимое конкретной бутылки может не поместиться полностью в конкретный стакан, если объем бутылки больше объема стакана. При этом Коля не хочет, чтобы после угощения что-то осталось, поэтому будет разливать напитки только так, чтобы они полностью поместились в стаканы. Напиток полностью помещается в стакан, если объем, содержащей его бутылки, не превосходит объем стакана.
Коля хочет своеобразно оценить сколько способов есть разлить напитки по стаканам друзей так, чтобы все напитки полностью поместились в стаканы. Так как число способов может быть довольно большим, Коля хочет знать его по модулю 1 000 000 007. Помогите Коле посчитать это число.
Входные данные
В первое строке дано число t - число тестовых наборов (1≤t≤100).
Каждый тестовый набор задается тремя строками. В первой из них дано число ni - число стаканов и бутылок напитков в i-ом наборе (1≤ni≤105).
Во второй строке даны ni чисел bi,j - объемы стаканов в i-м наборе (1≤ai,j,bi,j≤100).
В третьей строке заданы ni чисел ai,j - объемы бутылок в i-м наборе.
Гарантируется, что сумма ni по всем тестовым наборам не превосходит 3⋅105.
Выходные данные
Для каждого тестового набора выведите одно число - число способов разлить напитки по стаканам друзей так, чтобы все напитки полностью поместились в стаканы, взятое по модулю 1 000 000 007.
Примеры
| № |
Входные данные |
Выходные данные |
Пояснение |
| 1 |
3
3
1 1 1
1 2 1
5
1 2 3 4 5
1 2 3 4 5
3
2 2 2
2 1 2 |
0
1
6 |
В первом тестовом наборе второй напиток не помещается ни в один стакан, поэтому ответ будет ноль. Во втором тестовом наборе, существует лишь один способ разлить напитки. В третьем наборе любой напиток можно налить в любой стакан. |
| |
|
|
Напитки и стаканы - 1
Использование сортировки
Жадный алгоритм
К Коле на день рождения придут n друзей. По этому случаю он заготовил n бутылок различных напитков, а каждый из друзей принесет свой стакан.
Коля знает размеры стаканов каждого друга, однако, может случиться так, что содержимое конкретной бутылки может не поместиться полностью в конкретный стакан, если объем бутылки больше объема стакана. При этом Коля не хочет, чтобы после угощения что-то осталось, поэтому будет разливать напитки только так, чтобы они полностью поместились в стаканы.
Напиток полностью помещается в стакан, если объем, содержащей его бутылки, не превосходит объем стакана.
Коля хочет своеобразно оценить сколько способов есть разлить напитки по стаканам друзей так, чтобы все напитки полностью поместились в стаканы. Так как число способов может быть довольно большим, Коля хочет знать его по модулю 1 000 000 007. Помогите Коле посчитать это число.
Входные данные
В первое строке дано число t - число тестовых наборов (1≤t≤100).
Каждый тестовый набор задается тремя строками. В первой из них дано число ni - число бутылок напитков и стаканов в i-ом наборе (1≤ni≤105).
Во второй строке заданы ni чисел ai,j - объемы бутылок в i-м наборе.
В третьей строке даны ni чисел bi,j - объемы стаканов в i-м наборе (1≤ai,j,bi,j≤100).
Гарантируется, что сумма ni по всем тестовым наборам не превосходит 3⋅105.
Выходные данные
Для каждого тестового набора выведите одно число - число способов разлить напитки по стаканам друзей так, чтобы все напитки полностью поместились в стаканы, взятое по модулю 1 000 000 007.
Примеры
| № |
Входные данные |
Выходные данные |
Пояснение |
| 1 |
3
3
1 1 1
1 2 1
5
1 2 3 4 5
1 2 3 4 5
3
2 2 2
2 1 2 |
6
1
0 |
В первом тестовом наборе любой напиток помещается в любой стакан. Во втором тестовом наборе, существует лишь один способ разлить напитки. В третьем наборе ни один напиток не поместится во второй стакан, поэтому ответ будет ноль |
| |
|
|
Много пирожных
Использование сортировки
Жадный алгоритм
На кондитерской фабрике есть n видов пирожных, пирожных i-го вида на фабрике ai штук. Было принято решение отвезти пирожные на продажу на ярмарку, но директор фабрики решил, что кондитерские изделия на ярмарочной витрине должны быть выложены одинаковыми рядами, при этом пирожных каждого вида должно быть одинаковое количество. Необязательно отвозить на ярмарку все виды пирожных, можно выбрать некоторые виды и взять одинаковое число пирожных каждого выбранного вида.
Помогите директору отвезти на ярмарку наибольшее число пирожных - найдите, сколько видов пирожных и сколько пирожных каждого вида нужно отвезти на ярмарку.
Формат входных данных
Первая строка входных данных содержит число n - количество видов пирожных на фабрике, 1 <= n <= 105.
Следующие n строк содержат по одному числу ai - количество пирожных i-го вида, 1 <= ai <= 105.
Сумма всех значений ai не превосходит 2 x 109.
Формат выходных данных
Программа должна вывести два целых числа. Первое число равно количеству видов пирожных, которые необходимо выбрать для ярмарки. Второе число равно количеству пирожных каждого выбранного вида, которые нужно отвезти на ярмарку.
Если возможных ответов несколько, выведите любой из них.
Пояснение к примеру. Имеется 3 вида пирожных количеством 4, 10 и 7 штук. Наилучший ответ будет, если взять по 7 пирожных второго и третьего вида.
| |
|
|
*Третий максимальный
Использование сортировки
Алгоритмы обработки
Дано N целых чисел. Найти третий по величине максимальный элемент последовательности (элемент, который бы стоял третьим, если бы входные данные отсортировали по неубыванию).
Входные данные
В первой строке задается число N (\(3<=N<=10^5\)). Далее идут N строк, по одному числу в каждой строке.
Выходные данные
Выведите третий максимальный элемент.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
7
10
15
35
35
14
35
10 |
35 |
| 2 |
5
10
5
7
11
9 |
9 |
| |
|
|
Сортировка по сумме цифр
Использование сортировки
Алгоритмы обработки
Одномерные массивы
Напишите программу, которая сортирует натуральные числа в массиве по убыванию суммы цифр десятичной записи числа. При равенстве сумм цифр числа должны сохранить исходный порядок.
Входные данные
Первая строка содержит размер массива N . Во второй строке через пробел задаются N чисел – элементы массива. Гарантируется, что 0 < N ≤ 10000 .
Выходные данные
Программа должна вывести в одной строке элементы массива, отсортированного в порядке убыванию суммы цифр десятичной записи числа, разделив их пробелами.
| Ввод |
Вывод |
6
9 21 32 55 81 11 |
55 9 81 32 21 11 |
| |
|
|
Списки: алфавитно-частотный словарь
Словари
Использование сортировки
Алгоритмы обработки
Дан текст, состоящий из нескольких строк. Текст заканчивается строкой, содержащей единственное слово "END!". Слово "END!" не является содержимым текста, а служит только признаком окончания.
Постройте для данного текста алфавитно-частотный словарь отсортированный по частоте слов: список слов, справа от каждого слова должно быть указано, сколько раз оно встречается в исходном файле. Слова должны идти в порядке убывания. Если количество слов одинаково, сортировка идет по словам в лексикографическом порядке.
Слова должны быть приведены к строчному виду, и без знаков препинания.
Пример
| № |
Входные данные |
Выходные данные |
| 1 |
Duis aute irure dolor in reprehenderit in voluptate.
Velit esse cillum dolore eu fugiat nulla pariatur.
END! |
in 2
aute 1
cillum 1
dolor 1
dolore 1
duis 1
esse 1
eu 1
fugiat 1
irure 1
nulla 1
pariatur 1
reprehenderit 1
velit 1
voluptate 1
|
| |
|
|
Палиндром
Использование сортировки
Алгоритмы обработки
Палиндром - это строка, которая читается одинаково как справа налево, так и слева направо.
На вход программы поступает набор больших латинских букв (не обязательно различных). Разрешается переставлять буквы, а также удалять некоторые буквы. Требуется из данных букв по указанным правилам составить палиндром наибольшей длины, а если таких палиндромов несколько, то выбрать первый из них в алфавитном порядке.
Входные данные
В первой строке входных данных содержится число N (1 <= N <= 100000). Во второй строке задается последовательность из N больших латинских букв (буквы записаны без пробелов).
Выходные данные
В единственной строке выходных данных выдайте искомый палиндром.
| Ввод |
Вывод |
|
3
AAB
|
ABA |
|
6
QAZQAZ
|
AQZZQA |
|
6
ABCDEF
|
A |
| |
|
|
Форум
Использование сортировки
Клуб Юных Хакеров организовал на своем сайте форум. Форум имеет следующую структуру: каждое сообщение либо начинает новую тему, либо является ответом на какое-либо предыдущее сообщение и принадлежит той же теме.
После нескольких месяцев использования своего форума юных хакеров заинтересовал вопрос - какая тема на их форуме наиболее популярна. Помогите им выяснить это.
Входные данные
В первой строке вводится целое число N - количество сообщений в форуме (1 <= N <= 1000). Следующие строки содержат описание сообщений в хронологическом порядке.
Описание сообщения, которое представляет собой начало новой темы, состоит из трех строк. Первая строка содержит число 0. Вторая строка содержит название темы. Длина названия не превышает 30 символов. Третья строка содержит текст сообщения.
Описание сообщения, которое является ответом на другое сообщение, состоит из двух строк. Первая строка содержит целое число - номер сообщения, ответом на которое оно является. Сообщения нумеруются, начиная с единицы. Ответ всегда появляется позже, чем сообщение, ответом на которое он является. Вторая строка содержит текст сообщения.
Длина каждого из сообщений не превышает 100 символов.
Выходные данные
Выведите название темы, к которой относится наибольшее количество сообщений. Если таких тем несколько, то выведите первую в хронологическом порядке
| Ввод |
Вывод |
|
2
0
topic 1
body of message 1
0
topic 2
body of message 2
|
topic 1 |
| |
|
|
Анаграммы
Использование сортировки
Строки
Слово называется анаграммой другого слова, если оно может быть получено перестановкой его букв.
Формат входных данных
Даны два слова на отдельных строках. Слова состоят из строчных латинских букв и цифр. Длины слов не превышают 255.
Формат выходных данных
Требуется вывести "YES" – если введенные слова являются анаграммами друг друга, "NO" – если нет.
| |
|
|
Пары точек
"Два указателя"
Использование сортировки
На прямой находятся N точек. Требуется подсчитать количество пар индексов (i, j) таких, что i не равно j и |ai - aj| <= D.
Формат входных данных
В первой строке находятся два числа N и D (1 <= N <= 105, 1 <= D <= 109). Во второй строке находится N неотрицательных чисел, каждое из котороых не более чем 2*109.
Формат выходных данных
Выведите на экран ответ на задачу.
| |
|
|
Тяжелая, вариант-1
Задачи на моделирование
Использование сортировки
реализация
Гриша пишет дипломную работу на тему автостоянок в Берляндии. В ходе дипломной работы ему потребовалось решать следующую задачу.
Машины в Берляндии представляют собой отрезки длинной l. Автостоянка представляет отрезок на прямой [0;M]. В точке 0 и точке M находятся стены. В некоторых точках Xi этого отрезка могут стоять машины, то есть левая граница отрезка, образующего машину, находится в точке Xi. Уже стоящие на стоянке машины не пересекаются, но могут стоят вплотную друг к другу или к стене.
Требуется поставить на стоянку еще одну машину, которая приехала из другой страны. Причем машина не должна выходить за границы стоянки и пересекаться с другими машинами. Гриша хочет выяснить, какую наибольшую длину может иметь приехавшая машина, чтобы ее можно было поставить в некоторую точку, принадлежащую стоянке. Причем машину поставить на стоянку не так просто, поэтому слева и справа расстояние от границ приехавшей машины до ближайшего препятствия (другой машины или стены) должно быть не меньше некоторого b.
С учетом этих требований найдите наибольшую длину автомобиля, который можно поставить на стоянку.
Входные данные
В первой строке записаны четыре целых неотрицательных числа n, M, l и b (0 ≤ n ≤ 100, 1 ≤ M ≤ 100000, 1 ≤ l ≤ 100000, 0 ≤ b ≤ 100000) — количество автомобилей на стоянке, длина стоянки, длина автомобиля в Берляндии и необходимое расстояние от границ приехавшего автомобиля до ближайшего препятствия.
В следующей строке находятся n неотрицательных чисел Xi (Xi < M) — точки, в которых располагаются левые границы машин.
Гарантируется, что машины не пересекаются между собой, а также со стенами, но возможно соприкасаются.
Выходные данные
Первая строка должна содержать число L — максимально возможную длину автомобиля, который можно поставить на стоянку с учетом вышеизложенных требований.
Если не существует машины, которую можно было бы поставить, удовлетворяя все условия, выведите 0.
Пример входных и выходных данных
| Ввод |
Вывод |
4 21 1 1
7 12 3 16 |
2 |
4 30 3 1
24 5 11 18 |
3 |
2 20 3 1
7 10 |
5 |
| |
|
|
Слажал - отжался
Использование сортировки
реализация
Когда в очередной раз на уроке физкультуры дети не смогли сразу выстроиться по росту и это заняло 5 минут занятия, физрук придумал новое правило. Дети заходят все вместе и сразу встают в ряд. После этого могут меняться местами только два школьника, стоящих рядом. При этом они, конечно же, должны отжаться столько раз, какая у них оказалась разница в росте. Сколько раз в результате суммарно отожмутся школьники, прежде чем у них получится выстроиться по росту в порядке убывания?
Формат входных данных
В первой строке число содержится число N (2 <= N <= 1000) количество детей в классе. В
следующей строке записана исходная расстановка школьников: N чисел через пробел, i-е число
обозначает рост i-го школьника ri (1 <= ri <= 109) в нанометрах.
Формат выходных данных
Одно число суммарное количество отжиманий. Гарантируется, что школьники суммарно отожмутся не более 2 · 109 раз.
Замечание
В примере школьники с ростом 1 и 2 поменяются местами и каждый отожмјтся по разу, затем школьники 1 и 3 (каждый отжимается 2 раза, суммарно плюс 4 отжимания), и последними школьники 2 и 3 (плюс 2 отжимания).
| |
|
|
Тяжелая, вариант -2
реализация
Использование сортировки
На уроке информатики учитель рассказал Васе про новый вид строк — максимально-символьные строки. Строка называется максимально-символьной, если символ, который встречается в ней максимальное количество раз, единственен. Например, строка "abacaba" — максимально-символьная, потому что единственный символ, который встречается максимальное количество раз в ней — 'a'. В то же время строка "cabacbac" — не максимально-символьная, потому что символы 'a' и 'c' встречаются в ней максимальное количество раз, то есть не являются единственными.
После урока Вася сразу начал думать над следующей задачей: из данного набора символов составить как можно меньше максимально-символьных строк, используя все символы из набора ровно по одному разу в любом порядке. Вася не смог придумать решение этой задачи, поэтому обратился за помощью к вам. Помогите ему!
Входные данные
В единственной строке записана строка s, характеризующая набор символов. Ее длина не превосходит 100.
Выходные данные
В первой строке требуется вывести минимальное количество максимально-символьных строк k, которое можно составить из данного набора, использовав каждый символ ровно один раз.
В следующих k строках выходного файла требуется вывести максимально-символьные строки составленные из данного набора.
Если существует несколько правильных ответов, разрешается вывести любой из них.
Пример входных и выходных данных
| Ввод |
Вывод |
| abacaba |
1
abacaba |
| abcabc |
2
aab
ccb |
| abc |
3
a
b
c |
| cabacbac |
2
bcb
acaca |
| |
|
|
Златопольский 13.6
Алгоритмы обработки
Одномерные массивы
Использование сортировки
Известны максимальные скорости 20-ти моделей автомобилей. Все значения выражены в км/ч.
Написать программу, которая организовывает ввод исходных данных в структуру и выводит названия моделей автомобилей с самой маленькой и самой большой максимальной скоростью
Входные данные:
20 строк в формате <Марка автомобиля> <Максимальная скорость>
Выходные данные:
Необходимо вывести через пробел названия двух моделей автомобилей, сначала автомобиль с наибольшей максимальной скоростью, затем через пробел автомобиль с наименьшей максимальной скоростью
| |
|
|
Гирлянда
Словари
Использование сортировки
Все мы знаем и соблюдаем старую новогоднюю традицию - ставить дома хвойное дерево и украшать его разными предметами.
В семье Бонесов подрастает юный ДжонниБой. Мама учит его различать цвета и считать. Для этого она показывает ДжонниБою гирлянду на елочке и называет цвет лампочки, на которую показывает. Когда все лампочки перечислены, вместо цвета мама говорит “ноль”, чтобы ДжонниБой не запутался.
Юный Бонес еще не очень разобрался, и поэтому вам необходимо помочь ДжонниБою посчитать количество лампочек каждого цвета( цветом называется любая непустая последовательность символов).
Входные данные
Входной файл содержит последовательность строк, оканчивающаяся символом ‘0’(ASCII 48).
Выходные данные
Выходной файл должен содержать какое-то количество строк, отделенных переходом на новую строку. Каждая строка содержит в себе название цвета, символ ‘-‘ , отделенный пробелами с обеих сторон и число повторений его в последовательности. Строки должны выводиться в алфавитном порядке цветов.
Пример 1
Input
red blue red orange red green blue 0
Output
blue - 2
green - 1
orange - 1
red - 3
Пример 2
Input
Red red RED 0
Output
RED - 1
Red - 1
red - 1
(c) Курбатов Егор 9и
| |
|
|
Регистрация на олимпиаду
Строки
Использование сортировки
Петя и Вася проводят олимпиаду по программированию. На нее пришло так много участников,
что для того, чтобы их всех зарегистрировать, Пете и Васе пришлось работать вдвоем.
Для того, чтобы зарегистрироваться, каждый участник называет свои имя, фамилию и отчество,
а Петя и Вася заносят эту информацию в общую электронную таблицу. Так как участников много,
а времени на организацию так мало, Петя и Вася не успели договориться о формате записи данных
участника в таблицу и им пришлось импровизировать. Петя решил писать для каждого участника
сначала его фамилию, затем имя, а затем — отчество, а Вася — сначала имя, затем отчество, а
затем — фамилию.
По окончании регистрации стало понятно, что для подведения итогов олимпиады использовать
данную таблицу невозможно: участнику будет неудобно себя искать. Было решено привести таблицу
к следующему виду:
• для всех участников сначала написана фамилия, затем имя, а затем — отчество;
• участники в таблице упорядочены лексикографически по фамилии.
Петя и Вася заметили, что фамилии у всех участников различны, а вот каждое имя встречается
хотя бы два раза. При этом никакое имя не является ни фамилией, ни отчеством никакого из
участников, аналогично никакие фамилия и отчество не совпадают.
Пользуясь этой информацией, помогите им привести таблицу к желаемому виду.
Формат входных данных
В первой строке задано число n (2 ≤ n ≤ 1000) — общее число записей в электронной таблице.
Далее, в n строках записано по три слова s1,i, s2,i, s3,i. Каждое из слов содержит от 1 до 20 латинских
букв, первая буква является заглавной, а все остальные — строчными. Каждая строка соответствует
одной из записей, сделанных Петей или Васей. Слова разделены одним пробелом.
Формат выходных данных
Выведите n строк — электронную таблицу, в которой для каждого участника идет сначала
фамилия, потом имя, потом отчество, причем все записи отсортированы лексикографически.
Лексикографический порядок соответствует порядку в словарях: слова сначала сравниваются
по первой букве, затем по второй и т.д. Если очередная буква в одном из слов идет раньше в
алфавите, то это слово лексикографически меньше другого. Если же расхождение так и не найдено,
то есть одно из слов является префиксом другого, то считается, что слово, являющееся префиксом,
лексикографически меньше.
Пример
Ввод
4
Ivanov Ivan Ivanovich
Ivan Borisovich Petrov
Sergey Ivanovich Sidorov
Pavlov Sergey Borisovich
Вывод
Ivanov Ivan Ivanovich
Pavlov Sergey Borisovich
Petrov Ivan Borisovich
Sidorov Sergey Ivanovich
| |
|
|
Мерлин
Использование сортировки
реализация
Отрезки
Однажды, вернувшись в свою башню, Мерлин обнаружил, что Моргана наложила проклятие на
все его сосуды с эликсиром мудрости.
Мерлин знает, как снять проклятие, но соответствующее заклинание требует, чтобы во всех
сосудах, к которым оно применяется, было равное количество эликсира.
Чтобы добиться этого, Мерлин решил действовать следующим образом. Он выбирает несколько
сосудов и переливает весь эликсир из выбранных сосудов в оставшиеся. Он может распределить
переливаемый эликсир между оставшимися сосудами произвольным образом. После того, как весь
эликсир из выбранных сосудов перелит, Мерлин разбивает опустошенные сосуды (с них проклятие
уже не снять), выбрасывает осколки и применяет заклинание снятия проклятия к оставшимся
сосудам.
Помогите волшебнику узнать, какое наименьшее количество сосудов ему придется разбить,
чтобы снять проклятие Морганы.
Формат входных данных
В первой строке входного файла находится число n (2 ≤ n ≤ 105) — количество сосудов. Во
второй строке содержатся n чисел a1, a2, . . . , an (1 ≤ ai ≤ 109) — количество литров эликсира
мудрости в каждом сосуде.
Формат выходных данных
Выведите в выходной файл минимальное количество сосудов, которые Мерлину придется
разбить.
Пример
Ввод
3
2 3 2
Вывод
1
Ввод:
4
4 4 4 4
Вывод
0
Ввод
5
1 2 3 4 5
Вывод
2
В первом примере можно, например, перелить 0.5 литра эликсира из первого сосуда во второй
и 1.5 литра в третий, после чего разбить первый сосуд.
Во втором сосуды исходно содержат равное количество эликсира, можно ничего не переливать.
В третьем примере можно, например, перелить 1 литр эликсира из первого сосуда во второй, по
2 литра из пятого во второй и третий, 1 литр из пятого в четвертый, после чего разбить первый и
пятый сосуды.
| |
|
|
Количество операций
Использование сортировки
Вывод формулы
Количество операций
Дана программа сортировки (p141.pas). Требуется узнать, сколько раз
при сортировке конкретного массива с помощью этой программы
выполняется операция сравнения двух элементов массива (строка 25 программы).
Входные данные
Задано сначала число N (1≤N≤100), а затем N целых чисел, по модулю не превышающих 1000.
Выходные данные
Ваша программа должна печатать одно число - сколько
раз в процессе сортировки этого массива программой p141.pas выполнится
команда сравнения двух элементов массива.
Пример входного файла
5
3 1 2 4 2
Пример выходного файла
10
Текст программы p141.pas
const nmax=100;
var a:array[1..nmax] of integer;
n:integer;
i,j,g:integer;
f1,f2:text;
begin
assign(f1,'input.txt');
reset(f1);
assign(f2,'output.txt');
rewrite(f2);
{Чтение входных данных}
read(f1,n);
for i:=1 to n do read(f1,a[i]);
{Сортировка массива}
for i:=1 to n do begin {Подбираем число на i-ое место}
g:=i; {Считаем, что самое маленькое число,
которое нам встретилось, стоит на месте i}
for j:=i+1 to n do {Перебираем все числа с i+1 до конца массива}
if a[j]<a[g] then g:=j; {Если нашли число, которое меньше,
чем то, что уже найдено, запоминаем его}
{Меняем местами числа, стоящие на i-ом и
на g-ом местах }
{Если a[i]=x, a[g]=y, то после выполнения
команды: }
if i<>g then begin
a[i]:=a[i]+a[g]; {a[i]=x+y, a[g]=y}
a[g]:=a[i]-a[g]; {a[i]=x+y, a[g]=(x+y)-y=x}
a[i]:=a[i]-a[g]; {a[i]=(x+y)-x=y}
{То есть после этого a[i]=y, a[g]=x
обмен значений произошел}
end;
end;
{Выводим результат}
for i:=1 to n do
write(f2,a[i],' ');
close(f1);
close(f2);
end.
| |
|
|
Сортировка времени
Использование сортировки
Сортировка записей
Сортировка времени
Во входном файле записано сначала число N (1<=N<=100), а затем
N моментов времени. Каждый момент времени задается 3 целыми числами -
часы (от 0 до 23), минуты (от 0 до 60) и секунды (от 0 до 60).
В выходной файл выведите моменты времени, упорядоченные в порядке
неубывания (момент времени также выводится в виде трех чисел, ведущие нули
выводить не обязательно)
Пример входного файла:
4
10 20 30
7 30 00
23 59 59
13 30 30
Пример выходного файла:
7 30 0
10 20 30
13 30 30
23 59 59
| |
|
|
Сортировка
Использование сортировки
Сортировка
Во входном файле задано сначала число N (1<=N<=100), а затем N целых
чисел, по модулю не превышающих 1000.
Выведите N чисел в порядке неубывания.
Пример входного файла
5
3 1 2 4 2
Пример выходного файла
1 2 2 3 4
| |
|
|
Средний балл по предметам
Использование сортировки
Алгоритмы обработки
Годовые оценки по девяти предметам за 9-й класс каждого из N учеников класса напечатаны в виде таблицы (в первой строке - оценки первого ученика, во второй - второго и т.д.). Фамилия ученика записана в первом столбце. Необходимо вывести данную таблицу в порядке убывания среднего балла. В случае равенства среднего балла, фамилии выводить в порядке их следования в исходных данных.
Входные данные
На вход программе подаются:
- в первой строке число N - количество учеников (1<=N<=25);
- далее идут N строк, в формате <фамилия (последовательность латинских символов)> <оценка за 1й предмет> <оценка за 2й предмет> ... <оценка за 9й предмет>.
Выходные данные
Вывести на экран таблицу, записанную в порядке убывания среднего балла по всем предметам в формате:
<Фамилия> <Средний балл (с точностью 6 знаков после запятой)>
В случае равенства среднего балла, фамилии выводить в порядке их следования в исходных данных.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3
Sidorov 1 1 1 1 1 1 1 1 1
Ivanov 5 5 5 5 5 5 5 5 5
Petrov 4 4 4 4 4 4 4 4 4
|
Ivanov 5.000000
Petrov 4.000000
Sidorov 1.000000 |
| |
|
|
15580
Использование сортировки
Алгоритмы обработки
Годовые оценки по девяти предметам за 9й класс каждого из N учеников класса напечатаны в виде таблицы (в первой строке - оценки первого ученика, во второй - второго и т.д.) Фамилия ученика записана в первом столбце. Необходимо вывести данную таблицу в алфавитном порядке (по возрастанию, начиная с A заканчивая Z)
Входные данные: на вход программе подаются
в первой число N - количество учеников, 1<=N<=25
далее идут N строк, в формате <фамилия-последовательность латинских символов> <оценка за 1й предмет> <оценка за 2й предмет>... <оценка за 9й предмет>
Выходные данные: вывести на экран исходную таблицу, записанную в алфавитном порядке от A до Z
Примеры
входные данные
3
Sidorov 1 1 1 1 1 1 1 1 1
Ivanov 5 5 5 5 5 5 5 5 5
Petrov 4 4 4 5 4 5 5 5 5
выходные данные
Ivanov 5 5 5 5 5 5 5 5 5
Petrov 4 4 4 5 4 5 5 5 5
Sidorov 1 1 1 1 1 1 1 1 1
| |
|