| | | |
|
Сборная Юпитера
Задача на реализацию
Каждый год в одном из уголков нашей вселенной проходят Интеллектуальные Олимпийские Игры. В этом году честь проводить это масштабное мероприятие выпала планете Юпитер. Вам предстоит отобрать две команды на Игры из имеющихся n кандидатов в сборную.
Все кандидаты являются школьниками, каждый кандидат учится в определенном классе. Как и на Земле, на Юпитере 11 классов, пронумерованных от 1 до 11. На Игры отбирается две команды по результатам отборочных соревнований. На соревнованиях проводится пять отборочных туров. По итогам каждого тура каждый школьник может набрать от 0 до 300 баллов, чем больше, тем лучше.
В первую команду попадают четыре лучших школьника по сумме баллов, набранных на всех отборочных турах. Во вторую команду попадают четверо лучших по сумме баллов из тех, кто не попал в первую команду, и при этом не учится в 11 классе.
Все туры уже проведены, и получилось так, что любые два кандидата набрали в сумме различное количество баллов. Осталось лишь написать программу, которая по имеющимся данным о кандидатах и результатах туров определит тех восьмерых, которые защитят честь Юпитера на Интеллектуальных Олимпийских Играх и докажут, что Юпитер — суперпланета!
Входные данные
Первая строка входных данных содержит единственное число n — количество кандидатов в сборную Юпитера ( 8 ≤ n ≤ 500 ).
Следующие n строк содержат информацию о кандидатах. Каждая строка содержит 6 целых чисел — номер класса, в котором учится очередной кандидат, и его результаты на отборочных турах.
Номер класса является числом от 1 до 11, а результат на каждом туре — числом от 0 до 300.
Гарантируется, что все участники имеют различные суммарные баллы.
Гарантируется, что есть хотя бы 8 кандидатов, обучающихся не в 11 классе.
Выходные данные
Выведите две строки.
Первая строка должна содержать четыре целых числа, разделенных пробелами — номера кандидатов, которые попадут в первую команду Юпитера. Кандидаты нумеруются с единицы в порядке их появления во вводе. Выводить номера следует в порядке возрастания.
Вторая строка должна описывать вторую команду Юпитера в аналогичном формате.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
10
9 50 271 287 282 42
10 230 241 137 14 240
10 276 109 300 197 300
8 205 292 194 232 74
10 294 291 299 300 255
9 195 275 265 134 9
11 204 259 96 263 83
7 141 223 85 84 26
11 286 294 289 221 261
10 277 52 117 272 262 |
3 4 5 9
1 2 6 10 |
| |
|
|
Набор для торта
Комбинаторные структуры
Задача на реализацию
Ушан с планеты Блук открыл пекарню. В его пекарне продается N видов тортов. Каждый вид торта имеет три параметра: «красота», «вкус» и «популярность». I-й вид торта имеет красоту xi, вкус yi и популярность zi. Эти значения могут быть нулевыми или отрицательными.
Громозека решил, что купит М кусочков торта. Он выбирает набор следующим образом:
- Нельзя использовать два и более куска одного и того же вида торта.
- При указанном выше условии выбирается набор тортов, который максимизирует (абсолютное значение общей красоты) + (абсолютное значение общего вкуса) + (абсолютное значение общей популярности).
Найдите максимально возможное значение (абсолютное значение общей красоты) + (абсолютное значение общего вкуса) + (абсолютное значение общей популярности) для набора тортов, который выберет Громозека.
Входные данные
В первой строке через пробел записаны два целых числа N (1<=N<=1000) и M (0<=M<=N). В следующих N строках записано по три целых числа xi, yi и zi (-109<=xi, yi, zi <=109, 1<=i<=N).
Выходные данные
Выведите максимально возможное значение (абсолютное значение общей красоты) + (абсолютное значение общего вкуса) + (абсолютное значение общей популярности) для набора тортов, который выберет Громозека.
Примеры
| № |
Входные данные |
Выходные данные |
Пояснение |
| 1 |
5 3
3 1 4
1 5 9
2 6 5
3 5 8
9 7 9 |
56 |
Подумайте о 2-м, 4-м и 5-м видах тортов. Общая красота, вкус и популярность будут следующими:
Красота: 1 + 3 + 9 = 13
Вкус: 5 + 5 + 7 = 17
Популярность: 9 + 8 + 9 = 26
Значение (абсолютное значение общей красоты) + (абсолютное значение общей вкусовой привлекательности) + (абсолютное значение общей популярности) здесь равно 13 + 17 + 26 = 56. Это максимальное значение. |
| 2 |
5 3
1 -2 3
-4 5 -6
7 -8 -9
-10 11 -12
13 -14 15 |
54 |
Подумайте о том, чтобы иметь 1-й, 3-й и 5-й виды тортов. Общая красота, вкус и популярность будут следующими:
Красота: 1 + 7 + 13 = 21
Вкус: (−2) + (- 8) + (- 14) = - 24
Популярность: 3 + (- 9) + 15 = 9
Значение (абсолютное значение общей красоты) + (абсолютное значение общей вкусовой привлекательности) + (абсолютное значение общей популярности) здесь равно 21 + 24 + 9 = 54. Это максимальное значение. |
| 3 |
10 5
10 -80 21
23 8 38
-94 28 11
-26 -2 18
-69 72 79
-26 -86 -54
-72 -50 59
21 65 -32
40 -94 87
-62 18 82 |
638 |
Если у нас есть 3-й, 4-й, 5-й, 7-й и 10-й виды тортов, общая красота, вкус и популярность будут -323, 66 и 249 соответственно.
Значение (абсолютное значение общей красоты) + (абсолютное значение общей вкусовой привлекательности) + (абсолютное значение общей популярности) здесь равно 323 + 66 + 249 = 638. Это максимальное значение. |
| 4 |
3 2
2000000000 -9000000000 4000000000
7000000000 -5000000000 3000000000
6000000000 -1000000000 8000000000 |
30000000000 |
Значения красоты, вкуса и популярности тортов, а также значение, которое будет напечатано, могут не соответствовать 32-битным целым числам. |
| |
|
|
Комната
Задача на реализацию
Комната характеризуется тремя целыми числами: длиной, шириной и высотой, заданными в миллиметрах. Комната считается хорошей, если выполнены следующие условия:
отношение меньшей из длины и ширины к высоте хотя бы 2, а также отношение большей из длины и ширины к меньшей не превосходит 2.
По заданным размерам комнаты определите, является ли она хорошей.
Входные данные
На вход подаётся три целых числа: w, l и h — длина, ширина и высота комнаты, каждое
на отдельной строке (1000 ≤ w, l, h ≤ 10 000).
Выходные данные
Если комната является хорошей, выведите «good», иначе выведите «bad».
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4000
6000
3000 |
bad |
| 2 |
4600
8600
1600 |
good |
| |
|
|
Сломанный принтер
Циклы
Задача на реализацию
Конструктив
Сломанный цветной принтер, печатая цифры, закрашивает все замкнутые области в красный цвет. Например, в цифрах 0, 4, 6, 9 одна замкнутая область. В цифре 8 - 2 замкнутых области. В других цифрах нет замкнутых областей, которые закрашиваются. В принтере красной краски осталось на покраску h замкнутых областей. Найдите минимальное неотрицательное число, напечатав которое в принтере закончится красная краска. Число не должно содержать ведущих нулей. Если в принтере отсутствует красная краска, то он не может напечатать цифру с замкнутой областью.
Входные данные
На вход подается число h (0 <= h <= 510).
Выходные данные
Выведите число, которое необходимо напечатать.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
15 |
48888888 |
| 2 |
70 |
88888888888888888888888888888888888 |
| |
|
|
Отслеживание контактов
Задача на реализацию
Задачи на моделирование
Перебор
Фермер Джон продолжает заботиться о здоровье своих коров, последовательно пронумерованных 1…N.
Недавно ФД проверил их всех и выяснил, что некоторые из них больны. Используя видео из амбара, ФД может узнать какие пары коров взаимодействовали распространяя при этом болезнь. ФД собрал список с указанием времени, в которое происходило взаимодействие пар коров в видео (t,x,y), означающем, что в момент времени t корова x взаимодействовала с коровой y. Также ФД знает следующее:
- Ровно одна корова была инфицирована изначально (нулевой пациент).
- После того, кaк корова инфицирована, она передаёт инфекцию её следующим K взаимодействиям (возможно включая одного и того же партнера несколько раз). После
K раз передачи инфекций, она перестаёт передавать инфекцию (осознав что заражает, она начинает тщательно мыть копыта).
- Однажды заболев, она остаётся больной.
К несчастью, ФД не знает, какая из его N коров, является "нулевым пациентом", кроме того он не знает значение K!. Помогите ему сузить диапазоны этих неизвестных, основываясь на его данных. Гарантируется, что ответ существует.
Входные данные
Первая строка ввода содержит N (2<= N <=100) и T (1 <= T <= 250). Следующая строка содержит строку длиной N, состоящую из 0 и 1, описывающую текущее состояние N коров ФД, 0 - здорова, 1 - больна. Каждая из последующих T строк описывает запись из списка взаимодействий ФД, и состоит из трёх чисел, t,x,y, где t - положительное целое время взаимодействия (t <= 250), x и y - различные целые в интервале 1…N, указывающее какие коровы взаимодействовали в момент времени T. В один момент времени T происходит не более одного взаимодействия.
Выходные данные
Выведите одну строку, содержащую три целых числа x,y,z, где x - количество различных коров, которые могли быть "нулевым пациентом", y - минимально возможное значение K, подходящее к исходным данным, z - наибольшее возможное значение K, подходящее к исходным данным. Если для K нет верхней границы, выведите "Infinity" для z. Заметим, что возможно K=0.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4 3
1100
7 1 2
5 2 3
6 2 4 |
1 1 Infinity |
| |
|
|
Громозека и Алиса - 2
Задача на реализацию
Одномерные массивы
Циклы
Алиса и Громозека пошли гулять по городу. Заходя в первое кафе, Алиса посмотрела на часы и запомнила время входа. Далее она запоминала только количество минут, которое они с Громозекой тратили между двумя посещенными кафе (от входа в одно кафе, до входа в другое). По окончании прогулки, Алиса решила восстановить хронологию - время входа в очередное кафе.
Напишите программу, которая определит, в какое время Алиса и Громозека заходили в очередное кафе.
Входные данные
В первой строке задан, момент времени, в который Громозека и Алиса вошли в первое кафе. Формат времени: часы (число от 00 до 23), далее идет двоеточие, затем минуты (число от 00 до 59). Строка времени записана без пробелов.
Во второй строке записано натуральное число N (2 <= N <= 1000) - количество посещенных кафе (включая кафе из которого они вышли в начальный момент времени и последнее кафе). В третьей строке записано N-1 число: первое показывает время в минутах от входа в первое кафе до входа во второе, второе - время от входа во второе кафе до входа в третье и т.д. Каждое из этих чисел натуральное и не превышает 1000.
Выходные данные
Выведите для каждого кафе время входа Алисы и Громозеки. Формат времени должен быть такой же, как и во входных данных.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
07:00
4
10 5 3 |
07:00
07:10
07:15
07:18 |
| |
|
|
Where's Bessie?
Обход в глубину
Перебор
Задача на реализацию
Фермер Джон тестирует новую камеру, которая может "схватить картинку" и автоматически вычислить положение коров. К несчастью, у камеры не очень хороший алгоритм поиска коров и ФД нуждается в Вашей помощи.
Картинка, получаемая камерой, может быть описана решёткой из N×N символов, каждый в интервале A…Z, представляющих один из 26 возможных различных цветов. ФД считает наилучшим такой алгоритм распознавания коров: PCL (возможное размещение коровы) - это прямоугольник на решётке (возможно вся решётка) со сторонами параллельными сторонам решётки, не содержащий внутри других PCL и обладающий следующим свойством: внутри этого прямоугольника должны присутствовать ровно два цвета, один формирует непрерывный регион, а другой формирует два или более непрерывных регионов.
Например, такой образ
AAAAA
ABABA
AAABB
есть PCL, поскольку символы A формируют непрерывный регион, символы B форрмируют более одного непрерывного региона. Интерпретация - это корова с цветом A и с пятнами цвета B.
Регион является непрерывным, если вы может пройти его весь, перемещаясь из одной клетки в другую соседнюю по направлениям вверх, вниз, влево, вправо.
По заданному образу камеры ФД определите количество PCL.
ФОРМАТ ВВОДА:
Первая строка ввода содержит N, размер решётки (1≤N≤20). Следующие N строк описывают образ, каждая состоит из N символов.
ФОРМАТ ВЫВОДА:
Количество PCL в образе.
| Ввод |
Вывод |
|
4
ABBC
BBBC
AABB
ABBC
|
2 |
| |
|
|
Три четыре пять корову поменять
Вывод формулы
Задача на реализацию
Задачи на моделирование
N коров (1 ≤ N ≤ 100) Фермера Джона выстроены в ряд. i-ая корова слева имеет метку i, для всех 1≤i≤N.
ФД приказал коровам повторить ровно K (1 ≤ K ≤109) раз следующий двухшаговый процесс:
Последовательность коров в позициях A1…A2 слева реверсивно меняют свой порядок (1≤A1<A2≤N).
Затем последовательность коров в позициях B1…B2 слева реверсивно меняют свой порядок (1≤B1<B2≤N).
Выведите получившийся порядок коров для всех i 1 ≤ i ≤ N после выполнения этого процесса ровно K раз.
Входные данные
Первая строка содержит N и K. Вторая строка содержит A1 и A2, третья строка содержит B1 и B2.
Выходные данные
На i-ой строке выведите метку i-ой коровы слева после завершения процесса всех обменов.
Примеры
| № |
Входные данные |
Выходные данные |
Пояснение |
| 1 |
7 2
2 5
3 7
|
1
2
4
3
5
7
6
|
Изначально порядок коров слева направо такой [1,2,3,4,5,6,7]
После первого шага процесса порядок станет таким [1,5,4,3,2,6,7]
После второго шага процесса порядок станет таким [1,5,7,6,2,3,4].
Повторив оба шага ещё раз получим результат, приведенный в выводе. |
| |
|
|
Секретная последовательность
"Два указателя"
Одномерные массивы
Задача на реализацию
Алиса оставила для своего отца профессора Селезнева секретную последовательность a[1..n]. Чтобы ее не прятать, она решила написать ее на самом видном месте, но в другом порядке следования чисел. Профессор Селезнев знает, что Алиса переписала секретную последовательность в следующем виде:
- первым числом слева записано число
a1;
- первым числом справа записано число
a2;
- вторым числом слева (после
a1) записано число a3;
- вторым числом справа (то есть перед числом
a2) записано число a4;
- все остальные числа записаны аналогичным образом.
То есть, если бы секретная последовательность была a = [1, 2, 3, 4, 5, 6], то профессор бы увидел следующую последовательность [1, 3, 5, 6, 4, 2]. Профессор Селезнев очень торопился и успел только сохранить в компьютер последовательность, которую увидел. Напишите программу, которая покажет профессору исходную секретную последовательность.
Входные данные
Первая строка содержит размер последовательности n (1 <= n <= 300), записанной Алисой для своего отца. Вторая строка содержит n чисел ai (1 <= ai <= 109) - саму последовательность.
Выходные данные
Выведите исходную последовательность, которую Алиса выписывала для отца.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
6
1 3 5 6 4 2
|
1 2 3 4 5 6 |
| 2 |
1
23 |
23 |
| |
|
|
Книги Томми
"Два указателя"
Бинарный поиск
Задача на реализацию
Томми очень любит читать. Он взял из библиотеки n книг (в i-й книге ai страниц, страницы нумеруются с 1). Томми очень бережно относится к книгам, поэтому каждую из них обернул в обложку. Но, так как у него не оказалось ни одной прозрачной обложки, он пронумеровал книжки от 1 до n и написал номер на обложке каждой книги.
Томми читает уже m дней подряд. Книги он читает строго по порядку, начиная с книги с номером 1. Каждый день он записывает на доску общее число страниц, которые прочитал к текущему дню.
Например, если бы Томми взял 2 книги и, при этом, в в первой книге 3 страницы, а во второй - 5 страниц, то прочитав в первый день 2 страницы, а во второй день - 4 страницы у Томми на доске было бы записано два числа 2 и 6.
Томми сделал небольшой перерыв, а когда вернулся к чтению понял, что забыл какую книгу читал и на какой странице остановился. Также он не хочет терять статистику, но желает исправить ее, дописав в какой день какую книгу он читал и на какой странице остановился. Помогите Томми, по записанным числам на доске, определить в какой день какую книгу он читал и на какой странице остановился.
Входные данные
Программа получает на вход несколько строк. Первая строка содержит два целых числа n и m (1 <= n, n <= 2·105) - количество книг, взятых Томми из библиотеки и количество дней, в течении которых Томми читал книги. Во второй строке следует последовательность a1, a2, ... an (1 <= a1<= 1010), где ai равно количеству страниц в i-й книге. В третьей строке следует последовательность d1, d2, ... dm (1 <= dj <= a1 + a2 +...+ an), где dj равно общему числу страниц, прочитанных Томми к j-му дню. Все dj заданы в порядке возрастания.
Выходные данные
Выведите m строк. В каждой строке выведите по два числа - номер книги k (1 <= k <= n) и номер страницы в этой книге s (1 <= s <= ak), на которой остановился Томми в текущий день.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3 6
10 15 12
1 9 12 13 15 17 |
1 1
1 9
2 2
2 3
2 5
2 7 |
| 2 |
2 3
5 10000000000
5 6 9999999999 |
1 5
2 1
2 9999999994 |
| |
|
|
Громозека и валерьянка
Цикл for
Циклы
Простые задачи на перебор
Задача на реализацию
Громозека очень любит валерьянку. На его родной планете Чумароза можно купить за k чумриков (местная валюта) первую упаковку валерьянки, за 2·k чумриков - вторую и так далее (иными словами, за i-ю упаковку надо заплатить i·k чумриков). Громозека хочет купить w упаковок валерьянки. У него есть n чумриков. Сколько чумриков ему придется взять в кредит в чумарозском банке, чтобы купить w упаковок валерьянки?
Входные данные
В первой строке записано три положительных целых числа k, n, w (1 <= k, w <= 1000, 0 <= n <= 109), стоимость первой упаковки, изначальное количество чумарозиков у Громозеки и количество упаковок валерьянки, которые он хочет купить.
Выходные данные
Выведите единственное целое число - количество чумарозиков, которое Громозеке необходимо взять в кредит в банке. Если брать кредит не надо, выведите 0.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3 17 4 |
13 |
| |
|
|
Книжки с полки
Одномерные массивы
Задача на реализацию
Петя обладает обширной библиотекой книг. Сейчас он стоит возле полки с приключенческими рассказами. На ней расположены n книг. Все книги на полке у Пети всегда пронумерованы слева направо. Книга с номером i имеет ai страниц. На полке, возле которой сейчас стоит Петя, количество страниц в каждой книге различно.
Особенность полок в библиотеке Пети такова, что он может брать только крайнюю книгу с полки (то есть либо самую левую, либо самую правую).
Петя уезжает на каникулы к бабушке и хочет с собой взять две книги, самую толстую и самую тонкую. Помогите Пете узнать, какое минимальное количество книг ему необходимо убрать с полки, прежде чем в его руках окажутся две нужные ему книги. Обратите внимание, что самую толстую и самую тонкую книги Петя также убирает в с полки, поэтому они тоже считаются.
Входные данные
В первой строке записано одно целое число n (2 <= n <= 100) - количество книг на полке. Во второй строке находится n целых различных чисел a1, a2, ..., an (1 <= ai <= 106) - количество страниц в книге.
Выходные данные
Выведите одно целое число — минимальное количество книг, которое необходимо Пете убрать с полки.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5
1 5 4 3 2
|
2
|
| 2 |
8
2 1 3 4 5 6 8 7
|
4
|
| |
|
|
Мишины кубики
Использование сортировки
Жадный алгоритм
Задача на реализацию
Простые задачи на перебор
"Два указателя"
У маленького Миши есть кубики, на каждом из которых написана одна английская строчная буква. Вчера он выкладывал кубики в два ряда. В первом ряду у Миши 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, m (1 ≤ n,m ≤ 200) — размеры прямоугольника, содержащего все уже поставленные на поле крестики и нолики.
Следующие n строк содержат по m символов, каждый из которых равен одному из следующих:
«.» (точка), «X» (заглавная латинская буква «икс») или «0» (ноль). При этом «.» обозначает пустую клетку, «X» обозначает крестик, а «0» обозначает нолик. Гарантируется, что на поле находится
равное число крестиков и ноликов, и ни один игрок еще не одержал победу.
Формат выходных данных
Выведите одно число — количество оптимальных ходов Пети.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5 3
...
000
XXX
...
...
|
2 |
| 2 |
4 4
..0.
.XX0
.0X.
....
|
0 |
| 3 |
5 6
......
.XXX..
.0000.
..X...
......
|
0 |
| |
|
|
Чемпионат по поиску в сети Меганет
Структуры данных
Строки
Динамическое программирование
Конструктив
Задача на реализацию
Для проведения чемпионата мира по поиску в сети Меганет организаторам необходимо ограничить доступ к некоторым адресам. Адрес в сети Меганет представляет собой строку, состоящую из имени сервера и имени раздела.
Имя сервера представляет собой строку, содержащую от одной до пяти частей включительно. Каждая часть представляет собой непустую строку, состоящую из строчных букв латинского алфавита. Части разделены точкой. Примеры корректных имен сервера: «a», «ab.cd», «abacaba», «a.b.c.d.e».
Имя раздела представляет собой строку, которая может быть либо пустой, либо содержать от одной до пяти частей включительно. Каждая часть начинается с символа «/», после которого следует одна или несколько строчных латинских букв. Примеры корректных имен разделов: «», «/a», «/aba», «/a/b/c/d/e». Адрес формируется приписыванием имени раздела в конец имени сервера. Например, корректными адресами являются строки: «a», «aba/d/f/g/h», «a.b», «aba.caba/def/g», «c.d.e.f.g/a/b/c/d/e».
Для ограничения доступа к некоторым адресам сети Меганет организаторы чемпионата подготовили несколько фильтров. Фильтр, как и адрес, состоит из двух частей: фильтра сервера и фильтра раздела.
Фильтр сервера состоит из имени сервера, перед которым может также идти строка «*.». Если фильтр сервера представляет собой только имя сервера, то этому фильтру соответствует только сервер, имеющий точно такое же имя. Если фильтр сервера представляет собой строку «*.S », где S — имя сервера, то ему соответствуют сервера, удалением нуля или более начальных частей от имени которых можно получить строку S.
Аналогично, фильтр раздела представляет собой имя раздела, после которого может идти строка «/*». Фильтру раздела, который представляет собой просто имя раздела R, соответствуют только разделы, в точности совпадающие с R. Если фильтр раздела представляет собой строку «R/*», то ему соответствуют все разделы, удалением от имен которых нуля или более конечных частей можно получить строку R. Адрес соответствует фильтру, если его имя сервера соответствует фильтру сервера, а его имя раздела соответствует фильтру раздела.
Примеры фильтров и соответствующих им адресов приведены в таблице ниже.
| ab.c/d/e |
ab.c/d/e |
| *.a |
a ax.a efg.a |
| *.a/b/c |
a/b/c x.a/b/c e.fg.a/b/c |
| x.yz/a/* |
x.yz/a x.yz/a/b/c x.yz/a/xyz |
| *.a/* |
a x.a e.fg.a
a/b/c x.a/ddd/c e.fg.a/b/c/g/haha/i |
| *.a/b/c/* |
a/b/c x.a/b/c e.fg.a/b/c
a/b/c/xxx e.fg.a/b/c/d/e/f |
| |
|
Требуется написать программу, которая по заданному набору фильтров и списку адресов определяет для каждого адреса, какому числу фильтров соответствует этот адрес.
Пример:
Ввод:
2 0
a.bb/c
bb/c/d
4
a.bb
bb/c/d
a.bb/c/d
bb/c
Вывод:
0
1
0
0
Вывод:
4 0
*.bb/c
*.bb/c/*
bb/c/*
bb/c/*
6
bb
bb/c
bb/c/d
a.bb
a.bb/c
a.bb/c/d
Вывод:
0
4
3
0
2
1
| |
|
|
Магические порталы
Алгоритмы на графах
Задача на реализацию
Циклы
В некотором королевстве есть n городов, соединенных магическими порталами. Каждая пара различных городов соединена ровно одним магическим порталом, позволяющим мгновенно перемещаться из одного города в другой.
Из-за свойств магии, определяющей работу порталов, каждый портал можно использовать только в одну сторону. Для каждой пары городов A и B известно, можно ли воспользоваться порталом для перемещения напрямую из A в B или из B в A.
Из-за особенностей магических порталов иногда при перемещении жителей королевства из одного города в другой приходится использовать несколько порталов. Также могут существовать такие пары городов, что из одного города в другой нельзя добраться, используя только магические порталы.
Жители королевства называют город совершенным, если из него можно добраться до любого другого города в королевстве, используя только магические порталы. Пусть изначально количество совершенных городов в королевстве равно k.
Недавно король принял решение выбрать пару городов и изменить разрешенное направление перемещения по порталу, соединяющему их, на противоположное. Для выбора лучшего варианта король хочет понять, какое количество совершенных городов может оказаться в королевстве после перенастройки ровно одного портала.
Для получения этой информации король планирует запросить в министерстве транспорта соответствующий отчет. Король может запросить либо частичный, либо полный отчет. Содержимое отчета зависит от параметра L, для частичного отчета L = k + 1, для полного отчета L = 1.
Отчет содержит для каждого целого числа m, такого что m ≥ L, число таких пар городов A и B, для которых выполняются следующие условия:
- исходно магический портал позволяет перемещаться напрямую из города A в город B;
- если изменить направление перемещения этого магического портала на противоположное, чтобы он позволял напрямую перемещаться из города B в город A, то количество совершенных городов в королевстве станет равным m.
Таким образом, частичный отчет содержит информацию только о тех способах перенастройки одного портала, которые строго увеличивают количество совершенных городов в королевстве. Полный отчет содержит информацию обо всех способах перенастройки одного портала.
Требуется написать программу, которая по информации о разрешенных направлениях перемещения с использованием магических порталов, и информации о том, требуется предоставить частичный или полный отчет, формирует соответствующий отчет и выводит его в описанном ниже формате.
Формат входного файла
Первая строка входного файла содержит два целых числа: n — количество городов в королевстве (2 ≤ n ≤ 2000) и p, равное либо 0, если требуется вывести частичный отчет, либо 1, если требуется вывести полный отчет. Последующие n строк содержат по n символов, каждый из которых может быть «+», «–» или «.», и i-я из этих строк описывает магические порталы, соединяющие i-й город с другими городами.
В i-й строке j-й символ равен «+», если магический портал позволяет напрямую перемещаться из i-го города в j-й, равен «–», если магический портал позволяет напрямую перемещаться из j-го города в i-й, и равен «.», если i = j.
Формат выходного файла
Первая строка выходного файла должна содержать одно целое число k — количество совершенных городов в королевстве.
Если требуется частичный отчет (p = 0), то вторая строка выходного файла должна содержать (n – k) целых неотрицательных чисел, разделенных пробелами, где i-е из этих чисел должно быть равно количеству пар городов, изменение направления портала между которыми на противоположное приводит к тому, что количество совершенных городов в королевстве станет равным (k + i). Если при этом k = n, то вторая строка может отсутствовать, либо быть пустой.
Если требуется полный отчет (p = 1), то вторая строка должна содержать n целых неотрицательных чисел, разделенных пробелами, где i-е из этих чисел должно быть равно количеству пар городов, изменение направления портала между которыми на противоположное приводит к тому, что количество совершенных городов в королевстве станет равным i.
Пример:
| Ввод |
Вывод |
5 0
.-+++
+.+++
--.+-
---.+
--+-. |
1
0 0 0 3 |
5 1
.-+++
+.+++
--.+-
---.+
--+-. |
1
7 0 0 0 3 |
Пояснение к примерам
В приведенных примерах изначально совершенным является только город 2.
Изменив направление порталов, соединяющих пары городов (2, 3), (2, 4) или (2, 5), можно сделать все города совершенными. Изменение направление любого другого портала делает совершенным один город.
| |
|
|
Ремонт асфальта
Структуры данных
Задача на реализацию
Улица М. города Д. печально известна среди местных жителей качеством дорожного покрытия. В этом тяжело винить ремонтные службы: пожалуй, они следят за этой улицей даже слишком тща- тельно. Проблема в том, что каждый без исключения ремонт улицы выглядит следующим образом: бригада рабочих выбирает некоторый участок улицы единичной длины и меняет асфальт только на нём, причём тип асфальта на этом участке в результате может отличаться от типов асфальта на других участках, что, разумеется, усложняет проезд по улице.
Вы, как коренной житель города Д. и программист по призванию, решили использовать свои профессиональные навыки на благо общества и облегчить жизнь своим соседям по улице М. А именно, вы решили создать сайт, содержащий актуальную информацию о непроходимости улицы. Прежде всего, вы заметили, что улица разбита на N идущих друг за другом участков единичной длины. По странному совпадению бригада рабочих всегда выбирает для ремонта ровно один из таких участков и целиком меняет тип асфальта на нём. Затем вы пронумеровали эти участки от 1 до N и собрали информацию о типе асфальта на каждом из участков — числа t1, t2, . . . , tN (ti — номер типа асфальта на i-м участке, согласно Государственному реестру дорожных покрытий). Наконец, вы определили непроходимость улицы как минимальное количество непрерывных непересекающихся отрезков c одинаковым типом асфальта, на которые она разбивается. Например, непроходимость улицы 110111 равна 3, потому что она состоит из трёх участков 11, 0 и 111, а идеальная улица 2222 имеет непроходимость, равную 1.
Казалось бы, достаточно вычислить и разместить на сайте текущую величину непроходимости улицы, и жители будут довольны? К сожалению, асфальт меняют довольно часто, и вам не хочется каждый раз выходить на улицу и заново собирать данные. Поэтому вы дали возможность жителям сообщать на вашем сайте об обновлении дорожного покрытия. Дело осталось за малым — научиться обновлять после каждого такого сообщения актуальную величину непроходимости улицы.
Формат входных данных
Первая строка входного файла содержит единственное натуральное число N — количество участ- ков дороги (1 <= N <= 100 000). Следующая строка содержит N целых чисел t1, t2, . . . , tN — исходные типы асфальта участков дороги (|ti | <= 109 ). Третья строка содержит единственное натуральное число Q — количество сообщений от жителей об обновлении дорожного покрытия (1 <= Q <= 100 000). Каждая из следующих Q строк содержит очередное сообщение. i-е сообщение представляет собой пару целых чисел pi , ci — номер ремонтируемого участка дороги и новый номер типа асфальта на этом участке (1 <= pi <= N, |ci | <= 109 ). Участки дороги нумеруются от 1 до N в порядке задания их исходного типа асфальта во второй строке входного файла.
Формат выходных данных
Выведите Q строк. i-я строка (1 <= i <= Q) должна содержать единственное целое число — величину непроходимости улицы после первых i обновлений дорожного покрытия.
Примеры
| Ввод |
Вывод |
5
2 2 2 2 2
5
1 2
2 3
4 3
3 1
3 3 |
1
3
5
5
3 |
7
1 1 2 3 2 2 1
3
2 2
4 2
6 9 |
5
3
4 |
Замечание
Рассмотрим подробнее второй тестовый пример. Изначально улица 1123221 состоит из 5 отрезков с одинаковым типом асфальта: 11, 2, 3, 22, 1 и, соответственно, имеет непроходимость, равную 5 (её не нужно выводить в выходной файл).
После первого ремонта улица станет выглядеть как 1223221 и всё ещё будет состоять из 5 участ- ков, но других: 1, 22, 3, 22, 1. Поэтому её непроходимость равна 5, и первое число в выходном файле равно 5.
После второго ремонта улица будет состоять из 3 участков: 1, 22222, 1, так что второе число в выходном файле — 3.
После третьего ремонта получим 4 участка: 1, 2222, 9, 1, соответственно, третье и последнее число в выходном файле — 4.
| |
|
|
Kotlin Island
Задача на реализацию
Разбор случаев
There is an urban myth that Peter the Great wanted to make a rectangular channel-grid engineering masterpiece not only from Vasilyevskiy island, but also from Kotlin island (where the town of Kronstadt is located nowadays).
The following mathematical model was (allegedly) presented to the tsar. The island is considered a rectangular grid h cells high and w cells wide. Each cell is dry land initially but can become water.
Technologies of those days allowed engineers to dig a channel across the entire island. In that case an entire row or an entire column of cells became water. If some of these cells already were water, their status did not change.
Your task is to propose a plan of the island which has exactly n connected components of dry land cells.
Input
The only line of the input contains three integers h, w, and n — grid’s height, width and the desired number of connected components (1 ≤ h, w ≤ 100; 1 ≤ n ≤ 109 )
Output
If there is no valid plan containing n connected components, output a single word “Impossible”. Otherwise output h lines of length w depicting the plan. Dot (‘.’) represents a dry land cell, hash (‘#’) represents a water cell.
| Input |
Output |
| 3 5 4 |
..#..
#####
..#.. |
| 2 1 1 |
# . |
| 5 3 10 |
Impossible |
| |
|
|
СКОБКИ
Строки
Задача на реализацию
Дано корректное математическое выражение, состоящее из переменных, обозначаемых строчными латинскими буквами, инфиксных бинарных операций и круглых скобок для группировки подвыражений. Все операции имеют ассоциативность слева направо и приоритеты, указанные в таблице:
| Приоритет |
Операции |
| 1 (наибольший) |
*, / |
| 2 |
+, - |
| 3 |
& |
| 4 |
^ |
| 5 (наименьший) |
| |
Требуется удалить из выражения все лишние пары скобок, не влияющие на порядок операций в нём (операции трактовать абстрактно, без какого-либо математического смысла, опираясь только на формальный порядок операций). Приоритет определяет, в каком порядке выполняются операции в цепочке, а ассоциативность определяет направление вычислений в цепочке операций одного приоритета.
| Ввод |
Вывод |
Замечания |
| a+(b*c) |
a+b*c |
(у ‘*’ приоритет выше, чем у ‘+’, поэтому она и так выполняется первой,- скобки лишние); |
| ((a+b)+(c+d)) |
a+b+(c+d) |
(Скобки вокруг всего выражения допустимы, но никогда не влияют на порядок вычисления внутри. Поскольку ассоциативность всех операций слева направо, первые внутренние скобки лишние, а вторые – нет, без них выражение было бы эквивалентно (((a+b)+c)+d)); |
| ((a)+b)&c^d |
a+b&c^d |
(скобки вокруг переменной всегда лишние). |
| (((a)&b^c|((d)))) |
a&b^c|d |
|
| a |
a |
|
Формат входного файла:
Одна строка, содержащая исходное математическое выражение не длиннее 100 символов.
Формат выходного файла:
Одна строка с математическим выражением без лишних скобок.
| |
|
|
Шифрование
Задача на реализацию
Множества
Структуры данных
Одним из самых простых способов шифрования открытого текста является шифр простой замены. Он состоит в том, что каждая буква в алфавите, которым написано открытое сообщение, заменяется на какой-то другой символ, например, другую букву того же алфавита. Пусть дана таблица замены, использующая для замены только 33 буквы русского алфавита в верхнем регистре (заглавные буквы):
| Сообщение |
Шифртекст |
Сообщение |
Шифртекст |
Сообщение |
Шифртекст |
| А |
Г |
К |
Т |
Х |
З |
| Б |
Ш |
Л |
Х |
Ц |
Ж |
| В |
Ы |
М |
Я |
Ч |
Л |
| Г |
О |
Н |
Ь |
Ш |
Ё |
| Д |
Э |
О |
Ф |
Щ |
Н |
| Е |
Ц |
П |
У |
Ъ |
Д |
| Ё |
М |
Р |
К |
Ы |
Е |
| Ж |
Ъ |
С |
Ю |
Ь |
Б |
| З |
Щ |
Т |
Р |
Э |
Ч |
| И |
А |
У |
П |
Ю |
И |
| Й |
В |
Ф |
С |
Я |
Й |
Если применить замену, заданную такой таблицей, к слову «ДОМ», получится зашифрованный текст «ЭФЯ». Если применить замену к полученному результату, из «ЭФЯ» получится «ЧСЙ», а из «ЧСЙ» таким способом можно получить текст «ЛЮВ». Известно, что через некоторое количество применений замены полученный результат совпадет с исходным словом «ДОМ», после чего результаты замены начнут повторяться. Определите, сколько различных шифртекстов (включая совпадающий с исходным словом) можно получить из произвольного заданного слова по произвольно заданной таблице замены таким способом.
Рекомендации.
До начала работы над программной реализацией постарайтесь найти ответы на следующие вопросы:
1. Сколько различных зашифрованных текстов (включая и совпадающий с открытым текстом) можно получить одной операцией замены из открытого текста с n различными буквами, используя все возможные таблицы замены.
2.Можно ли получить все возможные зашифрованные тексты (число которых установлено в пункте 1), применяя к результату зашифрования операцию замены символов по одной и той же таблице неограниченное число раз.
Формат ввода:
В первой строке задана строка с алфавитом используемых символов. Во второй строке задана последовательность заглавных букв, заменяющих буквы, стоящие в алфавитном порядке (таблица замены). Например, приведенной выше таблице соответствует строка «ГШЫОЭЦМЪЩАВТХЯЬФУКЮРПСЗЖЛЁНДЕБЧИЙ». В следующей строке задано слово, являющееся открытым текстом – в верхнем регистре (заглавными буквами) без пробелов. Например, слово «КРИПТОАНАЛИЗ».
Каждая из этих строк заканчивается либо символами с кодами 13, 10 (окончание строк DOS – для Pascal ABC .NET), либо символом с кодом 10 (окончание строк Unix) в зависимости от выбранного при сдаче программы типа конца строк. Никаких других символов в двух входных строка не встречается.
Русский текст задан в кодировке Windows-1251 (cp1251). В ней заглавные русские буквы от "А" до "Я" кроме буквы "Ё" имеют коды от 192 (шестнадцатеричное C0) до 223 (шестнадцатеричное DF). Буква "Ё" имеет код 168 (шестнадцатеричное A8). Русские буквы (кроме "Ё") упорядочены по алфавиту.
Формат вывода:
В единственной строке выведите число, соответствующее количеству различных возможных шифртекстов, которые можно получить из заданного открытого текста с помощью заданной таблицы замены.
| |
|
|
КОЛОНИЗАЦИЯ МАРСА
Задача на реализацию
Ученым удалось отправить на планету Марс мини-фабрику, которая может за одни сутки произвести мини-фабрику или дрона для сбора воды (мини-фабрика или дрон для сбора воды могут начать работу только со следующих суток). Дрон собирает одну единицу воды за одни сутки. Определите, за какое минимальное количество суток удастся собрать не менее N единиц воды.
Формат входных данных
Задается одно число N ( 1<= N <= 109 ) – необходимое количество воды.
Формат выходных данных
Одно целое число M – минимально необходимое количество суток.
Замечание
Одна из правильных последовательностей действий выглядит так:
? В первые сутки мини-фабрика производит дрона для сбора воды;
? За вторые сутки мини-фабрика производит еще одного дрона, а первый дрон собирает одну единицу воды;
? За третьи сутки мини-фабрика может произвести еще одного дрона или мини- фабрику, при этом первый дрон собирает еще одну единицу воды (итого он собрал 2 единицы воды), а второй дрон собирает единицу воды. Таким образом, накоплено 3 единицы воды за трое суток.
Другая последовательность действий состоит в том, чтобы за первые сутки построить еще одну мини-фабрику, а за вторые сутки произвести двух дронов, которые на третьи сутки соберут 2 единицы воды.
| |
|
|
Смех, да и только!
Задача на реализацию
Колобок любит много смеяться. Чтобы подготовиться к встрече с потенциальным противником, Лиса решает изучить его смех.
Лиса считает, что смех — это последовательность чередующихся букв «a» и «h». Так например, «ahahaha», «hah» и «a» являются смехом, а «abacaba» и «hh» — нет.
Колобок разговаривает очень быстро, поэтому все его слова сливаются в одно большое. Для исследования Лиса хочет понять, как долго он может смеяться. У неё есть строка — запись разговора Колобка. Лиса хочет узнать наибольшую длину смеха в этом разговоре.
Лиса просит вас помочь ей с этой задачей.
Формат входного файла
В первой строке входного файла находится одно натуральное число n (1 ≤ n ≤ 105 ) — длина строки с разговором колобка. Во второй строке находится строка из строчных латинских букв длины n — запись разговора колобка.
Формат выходного файла
В выходной файл выведите одно число — наибольшую длину смеха в разговоре Колобка
| Ввод |
Вывод |
5
ahaha |
5 |
24
ahahrunawayahahsofasthah |
4 |
10
ahahaahaha |
5 |
| |
|
|
Британские ученые (В, А', А)
Словари
Задача на реализацию
Согласно исследованиям британских ученых, люди способны воспринимать слова в тексте, если в каждом слове оставить на месте первую и последнюю буквы, а остальные перемешать произвольным образом; например, слово "программа" может быть прочитано даже если оно записано как
"пгрроммаа" или "пморгамра".
Вам дан словарь с несколькими словами, а также некоторый текст. Для каждого слова из текста определите, можно ли его прочитать как одно из слов словаря, руководствуясь правилами, описанными выше.
Формат входных данных
В первой строке записано одно целое число n (1 <= n <= 105) - количество слов в словаре.
В следующих n строках записаны слова из словаря, по одному на строку. Гарантируется, что все слова в словаре различны.
В следующей строке записано одно целое число m (1 <= m <= 105) - количество слов в тексте.
В следующих m строках записаны слова из текста, по одному на строку.
Каждое слово состоит только из строчных букв латинского алфавита; ни в какой строке ввода нет пробелов и других разделителей. Суммарная длина всех слов не превосходит 105.
Формат выходных данных
Для каждого слова из текста выведите "YES" если его можно прочесть как одно из слов словаря, и "NO" в противном случае. Ответы для слов из текста следует выводить в том же порядке, в
котором слова перечислены во вводе; следует выводить по одному ответу на строку.
| Ввод |
Вывод |
4
bird
sun
lksh
summer
4
brid
snu
sommer
sis |
YES
NO
NO
NO |
| |
|
|
Прямоугольное поле чудес (В, А',A)
Задача на реализацию
Рекурсия
Коля попал на телеигру "Прямоугольное поле чудес". В финале этой игры Коле показали прямоугольное поле размера n х m клеток, в каждое клетке которого записано целое число. Коля может
заменить числа в некоторых клетках на противоположные (т.е. вместо числа x записать в клетку число −x). Коля выиграет автомобиль, если сумма чисел в каждой строке и в каждом столбце будет равна нулю. Помогите Коле найти нужную расстановку чисел, либо определите, что ее не существует и Коля не сможет выиграть.
Формат входных данных
В первой строке записано два целых числа n и m (1 <= n, m <= 5) - размеры поля.
В следующих n строках записано по m целых чисел, разделенных пробелами - числа, записанные в клетках поля. Все числа по модулю не превосходят 106.
Формат выходных данных
Если ответ существует, в первой строке выведите YES, в следующих n строках выведите по m чисел через пробел - числа в клетках поля после изменений/
Если ответа не существует, в первой строке выведите NO.
| Ввод |
Вывод |
3 3
1 1 2
2 2 4
3 3 6 |
YES
1 1 -2
2 2 -4
-3 -3 6 |
| |
|
|
Опять двойка (В, В')
Строки
Задача на реализацию
Пете нравится цифра 2. Он считает число красивым, если в его десятичной записи ровно две цифры 2. Петя хочет получить большой список красивых чисел и повесить его на стенку.
ПомогитеПете и выведите все красивые числа, не превосходищие n.
Формат входных данных
В первой и единственной строке записано одно целое число n (1 <= n <= 106).
Формат выходных данных
Выведите все целые положительные числа, не превосходящие n, в десятичной записи которых ровно две цифры 2. Числа следует выводить в порядке возрастания, по одному на строке.
Замечание
Обратите внимание, что список может быть пустым, в этом случае ничего выводить не нужно.
| |
|
|
Овечка Толя (C, B')
Задача на реализацию
Задача на реализацию
Рекурсия
Овечка Толя умеет клонироваться - тогда рядом с ней появляется такая же овечка с той же логикой и привычками.
Когда овечка встречает n стогов сена то происходит следующее:
- Если n меньше 4 то овечка выкидывает эти n стогов сена в ближайший овраг. Иначе:
- Если n делится на 5, то овечка сбрасывает n/5 стогов сена в ближайший овраг; клонируется;
сама обрабатывает 3n/5 стогов сена с помощью этой же процедуры, а ее клон обрабатывает
оставшиеся n/5 стогов сена с помощью этой же процедуры. Иначе:
- Овечка съедает 4 стога сена и обрабатывает оставшиеся n-4 стогов с помощью этой же процедуры.
Овечка Толя однажды увидела n стогов сена - это число вам дано. Сколько стогов сена будет
съедено ей и всеми е клонами при описанном процессе ?
Формат входных данных
В первой строке содержится натуральное число n <= 6 n <= 106
Формат выходных данных
Выведите количество, стогов съеденных в итоге Толей и клонами
| |
|
|
Овечка Толя (C, B')
Задача на реализацию
Задача на реализацию
Рекурсия
Овечка Толя умеет клонироваться - тогда рядом с ней появляется такая же овечка с той же логикой и привычками.
Когда овечка встречает n стогов сена то происходит следующее:
- Если n меньше 4 то овечка выкидывает эти n стогов сена в ближайший овраг. Иначе:
- Если n делится на 5, то овечка сбрасывает n/5 стогов сена в ближайший овраг; клонируется;
сама обрабатывает 3n/5 стогов сена с помощью этой же процедуры, а ее клон обрабатывает
оставшиеся n/5 стогов сена с помощью этой же процедуры. Иначе:
- Овечка съедает 4 стога сена и обрабатывает оставшиеся n-4 стогов с помощью этой же процедуры.
Овечка Толя однажды увидела n стогов сена - это число вам дано. Сколько стогов сена будет
съедено ей и всеми е клонами при описанном процессе ?
Формат входных данных
В первой строке содержится натуральное число n <= 6 n <= 106
Формат выходных данных
Выведите количество, стогов съеденных в итоге Толей и клонами
| |
|
|
Организация конференции (С, B')
Задача на реализацию
Задача на реализацию
Двумерные массивы
Недавно в солнечный весенний день директору Летней Флатландской Компьютерной Школы (ЛФКШ) Сергею Александровичу пришла в голову идея организовать первую флатландскую конференцию для школьников по программированию. Теперь перед ним стоит задача выбрать место проведения.
Флатландия представляет собой прямоугольник из m строк и n столбцов, в каждой из клеток которого расположен один город? Сергей Александрович уже посчитал для каждого города количество желающих принять участие в конференции. Известно, что флатландцы не любят далеко ездить, так что в каком бы городе она проводилась, в конференции смогут принять участие только школьники из самого города и соседних с ним по стороне городов. Формально говоря, если конференция проводится в городе, находящемся в i-ой строке и j-ом столбце, то в этой конференции будут участвовать школьники из городов (i, j), (i − 1, j) ( при условии, что i > 1) , (i + 1, j) (при условии, что i < m), (i, j − 1) (при условии, что j > 1) , и (i, j + 1) , (при условии, что j < n).
Сейчас Сергей Александрович хочет понять, в каких городах возможно поселить всех приезжих участников. Пока он выясняет количество доступных мест в гостиницах Флатландии, вам предстоит посчитать для каждого из возможных городов проведения, скольким школьникам потребуется предоставить жиль на время конференции.
Обратите внимание на то, что школьникам, живущим в том же городе, в котором проводится конференция, поселение не нужно.
Формат входных данных
В первой строке записаны два числа m и n (1 <= m, n <= 350) - размеры Флатландии. В каждой из последующих m строк содержатся по n чисел.
В i-ой стоке и j-ом столбце содержится число ai,j ( 0<= ai,j <=10000) - количество школьников из города (i, j), желающих принять участие в конференции.
Формат выходных данных
Выведите m строк по n чисел в каждой. Число в строке с номером i и стобце с номером j должно равняться количеству приезжих участников конференции, если местом проведения будет
выбран город, с координатами (i, j).
| Ввод |
Вывод |
3 4
1 0 3 2
5 6 1 2
1 1 0 11 |
5 10 3 5
8 7 11 14
6 7 13 2 |
1 1
5 |
0 |
| |
|
|
Организация конференции (С, B')
Задача на реализацию
Задача на реализацию
Двумерные массивы
Недавно в солнечный весенний день директору Летней Флатландской Компьютерной Школы (ЛФКШ) Сергею Александровичу пришла в голову идея организовать первую флатландскую конференцию для школьников по программированию. Теперь перед ним стоит задача выбрать место проведения.
Флатландия представляет собой прямоугольник из m строк и n столбцов, в каждой из клеток которого расположен один город? Сергей Александрович уже посчитал для каждого города количество желающих принять участие в конференции. Известно, что флатландцы не любят далеко ездить, так что в каком бы городе она проводилась, в конференции смогут принять участие только школьники из самого города и соседних с ним по стороне городов. Формально говоря, если конференция проводится в городе, находящемся в i-ой строке и j-ом столбце, то в этой конференции будут участвовать школьники из городов (i, j), (i − 1, j) ( при условии, что i > 1) , (i + 1, j) (при условии, что i < m), (i, j − 1) (при условии, что j > 1) , и (i, j + 1) , (при условии, что j < n).
Сейчас Сергей Александрович хочет понять, в каких городах возможно поселить всех приезжих участников. Пока он выясняет количество доступных мест в гостиницах Флатландии, вам предстоит посчитать для каждого из возможных городов проведения, скольким школьникам потребуется предоставить жиль на время конференции.
Обратите внимание на то, что школьникам, живущим в том же городе, в котором проводится конференция, поселение не нужно.
Формат входных данных
В первой строке записаны два числа m и n (1 <= m, n <= 350) - размеры Флатландии. В каждой из последующих m строк содержатся по n чисел.
В i-ой стоке и j-ом столбце содержится число ai,j ( 0<= ai,j <=10000) - количество школьников из города (i, j), желающих принять участие в конференции.
Формат выходных данных
Выведите m строк по n чисел в каждой. Число в строке с номером i и стобце с номером j должно равняться количеству приезжих участников конференции, если местом проведения будет
выбран город, с координатами (i, j).
| Ввод |
Вывод |
3 4
1 0 3 2
5 6 1 2
1 1 0 11 |
5 10 3 5
8 7 11 14
6 7 13 2 |
1 1
5 |
0 |
| |
|
|
Коды Грея
Задача на реализацию
Рекурсия
Конструктив
На занятиях по дискретной математике Сереже рассказали про двоичные коды Грея — это такое упорядочение всех 2n различных двоичных векторов длины n, что любые два соседних, а также первый и последний, вектора различаются ровно в одном разряде.
Для закрепления материала преподаватель задал им следующее задание: в коде Грея в каждом двоичном векторе ровно один бит заменен на знак вопроса «?». Требуется заменить обратно все знаки вопроса «?» на «0» или «1», чтобы получился код Грея.
Преподаватель обещал бонус на экзамене тому из студентов, кто первым справится с заданием. Помогите Сереже решить задачу или скажите, что это невозможно, и преподаватель задал нераз- решимое задание.
Формат входных данных
В первой строке содержится целое число n — длина двоичных векторов. Следующие 2n строк содержат двоичные вектора длины n, в каждом из которых ровно один символ заменен на знак вопроса «?».
Формат выходных данных
В первой строке выведите «YES», если решение существует, и «NO» — в противном случае. В случае положительного ответа выведите исходный код Грея, если возможных вариантов ответа несколько, выведите любой.
| Ввод |
Вывод |
2
0?
0?
1?
1? |
YES
00
01
11
10 |
3
?00
0?1
01?
0?0
?10
1?1
10?
1?1 |
NO |
Система оценки
| Номер подзадачи |
Баллы |
Ограничения |
Комментарии |
| 1 |
37 |
1<=n<=4 |
Баллы начисляются, если все тесты пройдены. |
| 2 |
63 |
1<=n<=12 |
Баллы начисляются, если все тесты этой и предыду- щих подзадач пройдены. |
| |
|
|
COWBASIC
"Длинная" арифметика
Задача на реализацию
Беси изобрела новый язык программирования, но поскольку нет компилятора, она нуждается в Вашей помощи для исполнения её программ.
COWBASIC - это простой, элегантный язык. У него две основные черты: сложение и циклы. Для решения проблемы переполнения, Беси выполняет все операции сложения по модулю 109+7. MOO-цикл исполняет блок кода фиксированное количество раз. Циклы и сложения могут быть вложенными.
Вам дана COWBASIC-программа, определите результат её выполнения - число, которое она вернёт.
ФОРМАТ ВВОДА:
Вам дана COWBASIC-программа длиной не более 100 строк, каждая строка длиной не более 350 символов. COWBASIC-программа это список операторов.
Имеется три типа операторов:
<переменная> = <выражение>
<литерал> MOO {
<список операторов>
}
RETURN <переменная>
Имеется три типа выражений:
<литерал>
<перменная>
( <выражение> ) + ( <выражение> )
Литерал - это положительное целое число не более 100,000.
Переменная - это строка не более 10 маленьких латинских букв.
Гарантируется, что переменная никогда не будет использована или возвращена оператором RETURN прежде, чем она будет определена. Гарантируется, оператор RETURN будет только один раз в последней строке программы.
ФОРМАТ ВЫВОДА:
Выведите одно положительное целое число - значение переменной, возвращённой оператором RETURN.
ОЦЕНИВАНИЕ
в 20% тестов MOO-циклы не вложены.
В других 20% всех тестов программу будет иметь только одну переменную. MOO-циклы могут быть вложенными
В остальных тестах нет никаких ограничений.
| Ввод |
Вывод |
Примечание |
x = 1
10 MOO {
x = ( x ) + ( x )
}
RETURN x
|
1024 |
Эта COWBASIC-программа вычисляет 210 |
n = 1
nsq = 1
100000 MOO {
100000 MOO {
nsq = ( nsq ) + ( ( n ) + ( ( n ) + ( 1 ) ) )
n = ( n ) + ( 1 )
}
}
RETURN nsq
|
4761 |
Эта программа вычисляет (105∗105+1)2 (по модулю 109+7). |
.
| |
|
|
The Lost Cow
Задача на реализацию
Вычисление по заданной формуле
Фермер Джон потерял свою корову Беси и хочет её найти.
К счастью через ферму ведёт только одна длинная дорога и и ФД знает, что Беси находится в некоторой точке на этой дороге. Если мы рассмотрим эту дорогу как числовую прямую, ФД сейчас находится в точке x, а Беси сейчас находится в точке y (неизвестной ФД). Если бы ФД знал, где Беси, то бы мог идти прямо к ней, пройдя расстояние |x−y|. К несчастью, сейчас темно, и ФД ничего не видит. Единственный способ, которым он может найти Беси - ходить вперёд и назад, пока не наткнётся на Беси.
Пытаясь найти наилучшую стратегию поиска ФД проштудировал компьютерную литературу и выяснил, что эта проблема ещё не решена и носит название "Проблема потерянной коровы".
Рекомендуемая стратегия такова: двинуться в позицию x+1, затем изменить направление движения на противоположное и перейти в позицию x−2, затем в позицию x+4 и т.д., двигаясь "большим зигзагом", каждый раз двигаясь в два раза дальше от своей первоначальной позиции, чем в прошлый раз. Такой подход гарантирует, что он пройдёт в худшем случае 9 раз прямое расстояние от себя до Беси |x−y|. И это - наименьшее число, гарантируемое в худшем случае.
ФД хочет проверить это утверждение. Вам даны x и y, вычислите общее расстояние пройденное в поиске по описанному выше алгоритму "большой зиг-заг", пройденное до момента находки Беси.
ФОРМАТ ВВОДА :
Единственная строка ввода содержит два различных разделённых одним пробелом целых числа x и y. Оба числа в интервале 0…1,000.
ФОРМАТ ВЫВОДА:
Выведите одну строку, содержащую расстояние пройденное ФД до достижения Беси.
| |
|
|
Circular Barn
Динамическое программирование
Динамическое программирование: два параметра
Задача на реализацию
Рекурсия
У Фермера Джона круглый амбар. Амбар состоит из кольца из n комнат, пронумерованных 1…n по периметру (3≤n≤1,000). Каждая комната имеет двери в две соседние комнаты и одну дверь во внешний мир.
ФД хочет разместить ровно ri коров в комнате i (1≤ri≤1,000,000). Он планирует открыть k внешних дверей (1≤k≤7), через которые коровы будут входить в амбар. Каждая корова затем идёт по часовой стрелке, пока не добредёт до нужной комнаты. ФД хочет открыть двери так, чтобы все коровы вместе прошли как можно меньшее расстояние. Коровы предварительно могут собраться как им выгоднее перед этими незакрытыми дверями (эти перемещения не входят в общее расстояние, учитываемое в задаче). Определите минимальное суммарное расстояние, которое придётся пройти коровам, если ФД наилучшим образом выберет какие k открыть.
ФОРМАТ ВВОДА:
Первая строка ввода содержит n и k. Последующие n строк содержат r1…rn.
ФОРМАТ ВВОДА:
Выведите минимальное суммарное расстояние пройденное коровами.
| Ввод |
Вывод |
|
6 2
2
5
4
2
6
2
|
14 |
ФД может открыть двери 2 и 5. 11 коров войдут в двери 2 и пройдут суммарное расстояние 8 чтобы попасть в комнаты 2,3,4. 10 коров войдут в дверь 5 и пройдут общее расстояние 6, чтобы попасть в комнаты 5,6,1.
| |
|
|
Телефонный справочник
Линейный поиск
Задача на реализацию
Строки
Саша недавно начала регистровать компанию по разработке чат ботов и уже подала необходимые документы. Но добрые люди рассказали Саше, что в телефонном справочнике компании располагаются в лексикографически возрастающем порядке их названий. Что такое телефонный справочник, Саша не знает, но решила учесть рекомендации и поменять название своей компании, чтобы оно было как можно раньше в телефонном справочнике. Поскольку Саша уже подала документы, она не может полностью поменять название компании, но может сказать, что допустила опечатку, и поменять любые две буквы в названии местами. Помогите Саше выбрать новое название компании или оставить текущее.
Формат входных данных
В единственной строке содержится одно слово, состоящее из строчных латинских букв от "a" до "z" (2 ≤ n ≤ 106)
Формат выходных данных
Выведите одно слово - новое название компании. Если название не~изменилось, выведите изначальное название.
| |
|
|
Башни 2.0
Задача на реализацию
Структуры данных
Структуры данных
Алгоритмы обработки
Линейные алгоритмы
Алгоритмы обработки
В компьютерной игре есть n башен, высота i-й башни равна ai метров. Определим расстояние между двумя башнями с индексами i и j как |i−j|. Разрешается прыгнуть с i-й башни на j-ю башню тогда и только тогда, когда не существует такого индекса 1 <= k <= n, такого, что расстояние от i-й до j-й башни не меньше расстояния от i-й башни до k-й башни, и k-я башня имеет большую высоту, чем j-я. Башня j достижима из башни i если существует последовательность корректных прыжков, которая начинается в i-й башне и заканчивается в j-й. Посчитайте для каждой башни количество достижимых из неё башен, включая её саму.
Входные данные
Первая строка входных данных содержит одно целое число n (1 <= n <= 500000) - количество башен.
Вторая строка входных данных содержит n чисел a1, a2, ..., an (1 <= an <= 109) - высоты башен.
Выходные данные
Выведите n чисел, i-е из которых должно быть равным количеству башен, достижимых из i-й башни.
Примечание
В первом примере с 1-й башни можно прыгнуть на башни 1 и 5. Любая другая башня имеет меньшую высоту, чем башня 1, поэтому туда нельзя прыгнуть (в качестве k можно выбрать 1). Множество достижимых из 1-й башни также состоит из башен 1 и 5. Со второй башни можно прыгнуть на башни 1, 2, и 5, они же являются множеством достижимых. С третьей башни можно прыгнуть на башни 2, 3, 5. Однако, башня 1 также является достижимой, поскольку можно сделать два прыжка: 3→2→1. Таким образом, получается 4 достижимые башни. С 4-й башни можно прыгнуть на башни 4 и 5, они же являются единственными достижимыми. Из 5-й башни достижима только она сама.
Во втором примере из 1-й и из 2-й башни достижимы башни 1,2,3,4,5. Из 3-й башни достижимы башни 3,4,5. Из 4-й и 5-й башни достижимы башни 4,5. Из 6-й башни достижимы башни 4,5,6. Из 7-й башни достижимы башни 4,5,6,7.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5
7 6 3 4 10
|
2 3 4 2 1
|
| 2 |
7
1 1 1 2 2 1 1
|
5 5 3 2 2 3 4
|
| |
|
|
Пират Серёжа
Конструктив
Задача на реализацию
Участникам, использующим язык Python3, рекомендуется отправлять решения на проверку с использованием интерпретатора PyPy3.
Маленький пират Серёжа скачал игру с разными видами головоломок. Среди них ему понравилась лишь одна, самая сложная.
Головоломка представляет из себя таблицу из \(n\) строк и \(m\) столбцов, в ячейках которой записаны числа от \(1\) до \(n \cdot m\) по одному разу.
Чтобы собрать головоломку, нужно выбрать последовательность клеток таблицы, в которой любые две подряд идущие клетки соседние по стороне в таблице. Последовательность может иметь произвольную длину, и каждая клетка может встречаться в последовательности произвольное число раз. Для клетки со значением \(i\) рассмотрим позицию \(t_i\) — позицию первого вхождения клетки с таким значением в последовательность. Последовательность решит головоломку, если каждая клетка таблицы встречается в ней, и \(t_1 < t_2 < \dots < t_{nm}\). Другими словами, последовательность должна в первый раз посетить клетку со значением \(x\) до клетки со значением \(x + 1\) для всех \(x\).
Назовем головоломку решаемой, если для нее существует хотя бы одна подходящая последовательность.
Серёжа понял, что не любая головоломка решаемая, так как подходящей последовательности может не существовать. Ему стало интересно, можно ли немного изменить головоломку, чтобы ее можно было решить. На это Серёже не хватило таланта, поэтому ему нужна ваша помощь.
За одно действие Сережа может выбрать две произвольных клетки (не обязательно соседние по стороне) и поменять числа, записанные в них. Он хотел бы знать минимальное число действий, которое потребуется, чтобы головоломка стала решаемой, но очень нетерпелив. Поэтому найдите, равняется ли минимальное число действий \(0\), \(1\), или же не менее \(2\). В случае, когда потребуется ровно \(1\) действие, найдите также количество подходящих пар клеток для обмена чисел.
Формат входных данных
В первой строке вводятся два целых положительных числа \(n, m\) (\(1 \leq n \cdot m \leq 400\,000\)) — длины сторон таблицы.
В каждой из следующих \(n\) строках вводятся \(m\) целых чисел \(a_{i1}, a_{i2}, \dots, a_{im}\) (\(1 \le a_{ij} \le n \cdot m\)).
Гарантируется, что каждое число от \(1\) до \(n \cdot m\) встречается ровно один раз.
Формат выходных данных
Пусть \(a\) — минимальное число действий, после которых головоломка станет решаемой.
Если \(a = 0\), выведите \(0\).
Если \(a = 1\), выведите \(1\), а также количество подходящих пар клеток.
Если \(a \ge 2\), выведите \(2\).
В первом примере из условия последовательность клеток \((1, 2), (1, 1), (1, 2), (1, 3), (2, 3), (3, 3)\), \((2, 3), (1, 3), (1, 2), (1, 1), (2, 1), (2, 2), (3, 2), (3, 1)\) решает головоломку, поэтому ответ \(0\).
Головоломка во втором примере из условия не решается, но будет решаться после любого из трех обменов клеток со значениями \((1, 5), (1, 6), (2, 6)\).
В третьем примере из условия потребуется не менее двух обменов, поэтому ответ равен \(2\).
| |
|
|
Вордл наоборот
Строки
Задача на реализацию
Перебор
Камила и Динара играют в <<Wordle>>. Камила загадала слово длины \(n\), состоящее из различных латинских букв. Динара сделала одну попытку угадать и назвала слово длины \(n\), также состоящее из различных латинских букв. Камила раскрасила буквы в догадке Динары в соответствии со следующими правилами:
-
Буква, совпадающая с буквой в загаданном слове, красится в зеленый цвет и обозначается G.
-
Буква, которая присутствует в загаданном слове, но стоит не своей позиции, красится в жёлтый цвет и обозначается Y.
-
Буква, отсутствующая в загаданном слове, красится в белый цвет и обозначается W.
Например, если было загадано слово ALERT, а догадка была ALONE, то буквы будут раскрашены в цвета GGWWY. Первые две буквы в словах совпадают, поэтому они зеленые. Буква E есть в загаданном слове, но находится на другой позиции, поэтому она жёлтая. Остальные буквы белые, так как их нет в загаданном слове.
Проснувшись следующим утром, Динара увидела, что буквы в ее слове не разобрать, так как они закрашены гуашью. Динара поняла, что забыла свою догадку. Помогите ей и определите, существует ли слово из различных букв, которое было бы раскрашено таким образом, и если существует, выведите любое такое слово.
В первой строке вводится одно целое число \(n\) \((1 \le n \le 10)\) — длина загаданного слова.
Во второй строке вводится строка длины \(n\), состоящая из заглавных латинских букв — загаданное слово. Гарантируется, что все буквы в нем различны.
В третьей строке вводится строка длины \(n\), состоящая из букв G, Y, W — цвета, в которые были раскрашены буквы в слове Динары.
Если подходящих слов не существует, выведите No.
Если хотя бы одно подходящее слово существует, в первой строке выведите Yes, во второй — любое подходящее слово.
Разберем первый пример из условия.
Буквы H и G не встречаются в загаданном слове, поэтому они белые.
Буквы E и B встречаются, но на других позициях, поэтому они жёлтые
Буквы C и D совпадают с буквами на соответствующих позициях в загаданном слове, поэтому они зелёные.
Есть и другие ответы, любой правильный ответ будет зачтен.
Обратите внимание, что строка HECDBH не является ответом, так как в ней есть совпадающие буквы.
| |
|
|
Палиндромные числа
Строки
Задача на реализацию
Участникам, использующим язык Python3, рекомендуется отправлять решения на проверку с использованием интерпретатора PyPy3.
Однажды во время прогулки Алина увидела длинное число, которое кто-то написал на асфальте. Алина захотела найти положительное число такой же длины без ведущих нулей, чтобы сумма этих двух чисел была палиндромом.
Число называется палиндромом, если оно читается одинаково справа налево и слева направо. Например, числа \(121, 66, 98989\) являются палиндромами, а \(103, 239, 1241\) — нет.
После некоторых размышлений Алина поняла, что такое число всегда можно найти. Помогите Алине найти подходящее число!
Формат входных данных
В первой строке вводится одно целое число \(n\) (\(2 \leq n \leq 100\,000\)) — длина числа, которое увидела Алина.
Во второй строке вводится одно положительное целое число длины \(n\). Гарантируется, что оно не содержит ведущих нулей.
Формат выходных данных
Выведите ответ на задачу — положительное целое число без ведущих нулей длины \(n\), такое что его сумма с числом из входных данных будет палиндромом.
Если таких чисел несколько, вы можете вывести любое из них.
В первом примере из условия \(99 + 32 = 131\) — палиндром. Число \(12\) также будет являться ответом, так как \(99 + 12 = 111\).
Во втором примере из условия \(1023 + 8646 = 9669\).
В третьем примере из условия \(385 + 604 = 989\).
| |
|
|
Держать строй
Задача на реализацию
Ник Фьюри решил, что бойцы отряда спецназа, являющегося подразделением организации S.H.I.E.L.D., помогут мстителям отразить атаку войска Локи. Он решил, что в бой отправятся n бойцов, а все остальные понадобятся в других местах. Теперь ему осталось только выбрать, какие именно бойцы пойдут в атаку.
Сначала Ник выбрал n бойцов случайным образом и выстроил их в линию, а затем стал по одному заменять кого-то из уже выбранных бойцов на другого солдата, который в настоящее время в строю не стоит. Поскольку отряд достаточно большой, Ник не знает каждого бойца лично. Оценить боеспособность отряда он может разве что по каким-нибудь заметным внешним признакам. Важным показателем боеспособности отряда является, например, то, стоят ли солдаты в строю по неубыванию роста.
Так, Ник может давать команды двух видов. Первая команда заключается в том, что новый солдат роста x встает в строй вместо солдата, стоящего на k-ом месте. Подавая вторую команду, он хочет узнать, стоят ли солдаты в строю по неубыванию роста. Ваша задача обрабатывать эти команды и сообщать в ответ на запросы то, что хочет узнать Ник.
Формат входного файла
Первая строка входного файла содержит два числа n и m (1 ≤ n ≤ 100 000, 0 ≤ m ≤ 200 000) количество солдат в строю и количество команд, которые подаст Ник. Вторая строка содержит n целых неотрицательных чисел, не превосходящих 109 исходный рост солдат в строю. Следующие m строк содержат команды, подаваемые Ником. Если первый символ в строке, описывающей очередную команду, '!', то за ним следуют два числа k и x (1 ≤ k ≤ n, 0 ≤ x ≤ 109), где k место в строю того солдата, которого должен заменить солдат роста x. Команда второго типа описывается знаком '?'.
Формат выходного файла
Для каждой команды второго типа в отдельной строке выведите "YES", если в данный момент солдаты в строю стоят по неубыванию роста, и "NO" в противном случае.
| Ввод |
Вывод |
5 5
2 4 6 8 10
?
! 2 7
?
! 3 8
? |
YES
NO
YES |
| |
|
|
Поймать Халка
Задача на реализацию
Когда Локи ловил Халка, он немного не рассчитал своих сил, и случайно перенес его в параллельный n-мерный мир. После этого Локи намертво вморозил Халка в глыбу льда. Для окончательной победы Локи необходимо только отпилить от глыбы лишний лед так, чтобы остался только сам замороженный Халк. Пространство, в которое Локи перенес все происходящее, не более чем трехмерно. В одномерном пространстве глыба представляет из себя отрезок некоторой длины, а Халк внутри вложенный в него отрезок. В двумерном пространстве глыба и Халк прямоугольники со сторонами, параллельными оcям координат, причем Халк вложен в глыбу. Аналогично, в трехмерном пространстве глыба и Халк являются параллелепипедами со сторонами, параллельными осям координат.
Локи может отрезать от глыбы какие-то куски льда. В одномерном пространстве разрез точка, в двумерном прямая, в трехмерном плоскость. В любом пространстве разрез не должен проходить через Халка, но может его касаться. Локи хочет узнать, за какое минимальное количество разрезов он сможет оставить от глыбы льда только ту ее часть, в которой находится Халк.
Формат входного файла
Первая строка входного файла содержит одно число n (1 ≤ n ≤ 3) количество измерений в пространстве, в котором происходит действие. Следующая строка содержит n натуральных чисел ai (1 ≤ ai ≤ 10000) координаты одной из вершин глыбы. Будем считать, что вершина глыбы, противоположная данной, находится в начале координат.
В следующей строке сначала перечислены n целых чисел bi (0 ≤ bi ≤ ai) координаты одной из вешин Халка, затем еще n целых чисел ci (0 ≤ ci ≤ ai) координаты противоположной вершины Халка.
Формат выходного файла
Выведите единственное целое число минимальное количество разрезов, которые необходимо
сделать Локи, чтобы выпилить Халка.
| Ввод |
Вывод |
1
5
0 3 |
1 |
2
3 4
2 2 3 3 |
3 |
3
2 2 2
0 1 0 1 2 1 |
3 |
| |
|
|
Посадка в самолет
Конструктив
Задача на реализацию
В самолетах авиакомпании Битавиа кресла расположены в \(n\) рядов, при этом в каждом ряду по шесть мест, между третьим и четвертым местом находится проход. Некоторые пассажиры регистрируются заранее онлайн, другие пассажиры регистрируются на стойке регистрации в аэропорту.
При онлайн-регистрации пассажир может выбрать любое место и не может его затем менять. Например, при \(n = 6\) рассадка в самолете после онлайн-регистрации может выглядеть так (крестиками отмечены занятые места):
На стойку регистрации придут \(m\) пассажиров. По правилам Битавиа нужно рассадить их в самолете таким образом, чтобы итоговая рассадка в самолете была симметрична относительно прохода. То есть, если в некотором ряду на первом кресле сидит пассажир, то в том же ряду на шестом кресле тоже должен сидеть пассажир. То же самое справедливо для второго и пятого, третьего и четвертого кресел, соответственно. При этом пересаживать пассажиров, прошедших онлайн-регистрацию нельзя. В исходную рассадку, показанную на рисунке выше, можно добавить семь пассажиров, удовлетворив условие симметрии, например, следующим образом:
Вам дана рассадка пассажиров после онлайн-регистрации. Требуется рассадить \(m\) пассажиров так, чтобы итоговая рассадка в самолете была симметрична относительно прохода, или определить, что это невозможно.
Формат входных данных
В первой строке содержатся два целых числа \(n\) и \(m\) — количество рядов в самолете и количество пассажиров, которые придут на стойку регистрации (\(1 \le n \le 1000\), \(0 \le m \le 6000\)).
В следующих \(n\) строках задана изначальная рассадка в самолете после онлайн-регистрации. В каждой строке содержится по шесть символов, при этом \(i\)-й символ \(j\)-й строки равен <<X>> (заглавная английская X), если \(i\)-е место в \(j\)-м ряду уже занято и <<.>> (точка) иначе.
Формат выходных данных
Если искомой рассадки не существует, выведите <<Impossible>>.
Иначе выведите \(n\) строк по шесть символов — итоговую рассадку в самолете. При этом \(i\)-й символ \(j\)-й строки должен быть равен <<X>>, если место занято, и <<.>>, если свободно. Если существует несколько решений, разрешается вывести любое.
Ниже приведены пять примеров входных данных.
-
В первом примере \(m = 0\), а рассадка в самолете симметрична, поэтому итоговая рассадка совпадает с исходной.
-
Во втором примере есть только один способ рассадить пассажиров симметрично.
-
В третьем примере существовало бы решение, при \(m = 1\), но при \(m = 2\) не существует способа рассадить всех пассажиров симметрично.
-
В четвертом примере требуется рассадить больше пассажиров чем свободных мест в самолете.
-
Пятый примере соответствует ситуации, рассмотренной на рисунках в тексте условия. В этом примере существует несколько решений, приведено одно из них.
| |
|
|
Телефонные номера
Разбор случаев
Задача на реализацию
Строки
Неотъемлемой частью программного обеспечения любого мобильного телефона является записная книжка. В самых первых мобильных телефонах в ней можно было хранить лишь имена абонентов и их телефонные номера. В более современных моделях в ней можно также хранить множество другой полезной информации — электронный адрес человека, его фотографию, ссылки на его страницы в социальных сетях и дату его рождения. Однако, при реализации даже самой простой версии этой программы, позволяющей работать только с телефонными номерами, разработчики иногда сталкиваются с некоторыми сложностями.
Будем считать, что любой телефонный номер состоит из 11 цифр и делится на три части, каждая из которых является числом без ведущих нулей. Первая часть состоит из одной, двух или трех цифр и является кодом страны, в которой этот телефон зарегистрирован. Вторая часть может состоять из трех, четырех или пяти цифр, и может являться или кодом региона, в котором зарегистрирован номер, или кодом мобильного оператора, которому этот номер принадлежит. Третья часть состоит из всех оставшихся цифр номера и является номером конкретного абонента.
При отображении телефонного номера на экране телефона, части этого номера принято отделять друг от друга различными символами так, чтобы номер было проще прочитать и запомнить. Так, перед кодом страны обычно ставится символ «+», код региона или оператора берется в скобки, номер абонента разделяется символами «-» на несколько частей. При этом, то, на сколько частей он разбивается, напрямую зависит от количества цифр в нем:
• если номер абонента состоит из трех цифр, то он представляет собой одну часть, состоящую из трех цифр;
• если номер абонента состоит из четырех цифр, то он разбивается на две части, каждая из которых состоит из двух цифр;
• если номер абонента состоит из пяти цифр, то он разбивается на две части, первая из которых состоит из трех цифр, а вторая — из двух;
• если номер абонента состоит из шести цифр, то он разбивается на три части, каждая из которых состоит из двух цифр;
• если номер абонента состоит из семи цифр, то он разбивается на три части, первая из которых состоит из трех цифр, а все остальные — из двух.
Естественно, что человек, заносящий новый номер в записную книжку своего телефона, не станет задумываться об этих правилах, а просто введет его как последовательность из 11 цифр. Однако, перед отображением номера на экране, программное обеспечение телефона должно выяснить, какая часть этого номера является кодом страны, какая — кодом региона или оператора, а какая — номером абонента, и отформатировать номер по правилам, описанным выше. Чтобы сделать эту задачу разрешимой, в память телефона записывается информация о том, какие в данный момент существуют коды государств и какие в этих государствах существуют коды операторов или регионов. Вам необходимо реализовать программу, которая, имея эту информацию, будет правильно форматировать номера, сохраненные в записной книжке телефона.
Формат входных данных
Первая строка файла содержит одно целое число n (1 ≤ n ≤ 100) — количество государств, информация про телефонные коды которых записана в память телефона. Далее следуют n описаний этих государств, разделенных переводами строк. Первая строка описания каждого государства содержит два целых числа c и k (1 ≤ c ≤ 999, 1 ≤ k ≤ 100) — телефонный код этого государства и количество операторов или регионов, существующих в этом государстве. Следующие k строк описания этого государства содержат целые числа, каждое из которых не меньше 100 и не больше 99999 — коды операторов или регионов, зарегистрированных в этом государстве.
Следующая строка входного файла содержит одно целое число m (1 ≤ m ≤ 10 000) — количество телефонных номеров, которые необходимо отформатировать. Следующие m строк содержат сами номера — строки, состоящие ровно из 11 цифр.
Гарантируется, что ни один данный вам номер невозможно разбить на код государства, код оператора или региона и номер абонента более, чем одним способом.
Формат выходных данных
Выведите номера, данные вам во входном файле, отформатированными по правилам, описанным в условии. Каждый номер необходимо вывести в отдельной строке. Номера необходимо выводить в том же порядке, в котором они были перечислены во входном файле. Вместо номеров, корректного разбиения которых на код государства, код оператора или региона и номер абонента не существует, необходимо вывести слово «Incorrect».
| Ввод |
Вывод |
2
7 3
981
3517
812
351 3
34712
1234
963
8
79818266456
35196328463
78122472557
01234567890
73517960326
35134712239
35112342013
78120203040 |
+7(981)826-64-56
+351(963)284-63
+7(812)247-25-57
Incorrect
+7(3517)96-03-26
+351(34712)239
+351(1234)20-13
Incorrect |
| |
|
|
Вращающаяся пластина
Задача на реализацию
Вычислительная геометрия
Мальчик Вася очень любит геометрию. Кроме того, ему очень нравится забивать гвозди в доску. Сегодня он изучает свою любимую металлическую пластину, которую он собирается прибить к деревянной доске.
Пластина имеет форму, ограниченную многоугольником без самопересечений и самокасаний. В первой вершине многоугольника пластина имеет маленькую петлю.
Сначала Вася кладет пластину на доску, лежащую на горизонтальном столе, и прибивает ее гвоздем к пластине через петлю в первой вершине. Вбитый гвоздь жестко закрепляет положение первой вершины, однако позволяет пластине вращаться вокруг нее.
Теперь Вася хочет забить в доску еще один гвоздь, который бы ограничил вращение пластины, но он еще не решил куда. Он наметил m возможных позиций, куда он хотел бы забить гвоздь, и для каждой из них хочет узнать, на какой угол он сможет поворачивать свою пластину, если забьет в доску гвоздь в этой точке. При этом как только пластина касается гвоздя, дальше ее поворачивать нельзя.
Формат входных данных
В первой строке входного файла задано число n (3 ≤ n ≤ 2 000) — количество вершин многоугольника. В следующих n строках заданы координаты вершин многоугольника в порядке обхода. В следующей строке задано число m (1 ≤ m ≤ 2 000) — количество точек, которые Вася рассматривает как возможные положения второго гвоздя. В следующих m строках заданы координаты этих точек. Все эти точки находятся снаружи от исходного положения пластины. Все координаты во входном файле целые и не превосходят 106 по модулю.
Формат выходных данных
Выходной файл должен содержать m строк. В i-й строке выведите два вещественных числа αi и βi , где αi — максимальный угол в градусах, на который можно повернуть пластину по часовой стрелке, если Вася забьет гвоздь в i-ю точку, а βi — максимальный угол в градусах ,на который в этом случае можно повернуть пластину против часовой стрелки. Если гвоздь не мешает пластине поворачиваться, выведите αi = βi = 360. Ответ считается верным, если его абсолютная или относительная погрешность относительно правильного не превосходит 10−6 .
| Ввод |
Вывод |
4
0 0
-3 -3
0 -6
3 -3
3
-8 0
-2 0
2 -1 |
360.000000000000 360.000000000000
45.000000000000 225.000000000000
251.565051177078 18.434948822922 |
Пояснение

На рисунке выше изображен тест из примера. Прямоугольник показывает начальное положение пластины.
Точками показаны позиции, в которые Вася планирует забить гвоздь.
Гвоздь, забитый в первую точку, не мешает пластине поворачиваться.
Гвоздь, забитый во вторую точку, позволяет повернуть пластину на 45 гр. по часовой стрелке или на 225 гр. против часовой стрелки.
| |
|
|
Перетягивание каната
Алгоритмы сортировки
Задача на реализацию
В 2086 году в программу зимней олимпиады решено было добавить соревнования по перетягиванию каната на льду. Для проведения финала соревнования организаторы нашли n кусков каната. Для повышения зрелищности соревнования решено было сделать связать некоторые из этих кусков в один как можно более длинный канат.
Когда начались работы по связыванию, выяснилось, что на узел, связывающий два куска каната между собой, уходит по d сантиметров каната с каждого из связываемых концов. Также, оказалось, что связывать так, что получающиеся узлы находятся близко друг к другу, невозможно: расстояние между соседними узлами должно быть хотя бы d сантиметров. Например, если d = 10, то после связывания кусков каната длиной 25 и 50 сантиметров, получается канат длиной 55 сантиметров, в 15 сантиметрах от одного из краев которого находится узел.
До начала соревнований остается мало времени, поэтому они обратились за помощью к вам. Помогите организаторам выяснить, канат какой максимальной длины удастся получить.
Формат входных данных
В первой строке заданы числа n (1 ≤ n ≤ 100 000) и d (1 ≤ d ≤ 1000) — количество кусков каната и длина каната, уходящая на завязывание узла. Во второй строке заданы n чисел ai (1 ≤ ai ≤ 1000) — длины имеющихся кусков каната.
Формат выходных данных
Выведите единственное число — максимальную длину каната, которую можно получить.
| Ввод |
Вывод |
2 10
25 50 |
55 |
5 2
4 5 6 7 8 |
14 |
| |
|
|
Загранпаспорт
Задача на реализацию
Осень 2243-го года. Государства в прошлом, главным территориальным образованием является автономия. В результате терраформирования территория бывшей Евразии теперь представляет собой прямоульник, он разбит на w × h квадратных автономий, которые организованы в виде сетки из w автономий по ширине и h по высоте. Некоторые автономии входят в содружество Крипто, они представляют собой криптоанархистские технократические общества и не признают бюрократии. Остальные автономии входят в конфедерацию Бюрро, бюрократия в них доведена до высшего совершенства.
Для перемещения между автономиями необходим загранпаспорт. При въезде в автономию содружества Крипто предъявлять документы не нужно, но при въезде в автономию конфедерации Бюрро пограничная служба проверяет документ, заполняет специальные формы и проставляет в загранпаспорт путешественника штамп своей автономии. Один штамп занимает одну страницу паспорта, разные штампы ставятся на разные страницы.
Опытный путешественник по имени Вениамин хочет получить загранпаспорт нового образца. Чтобы это сделать досрочно, ему нужно заполнить все страницы своего старого паспорта штампами пограничных служб. На данный момент у него осталось n пустых страниц, соответственно ему нужно ровно n раз въехать в автономию Бюрро. Он хочет сделать это как можно быстрее. Вениамин путешествует таким образом, что за один день он переезжает из автономии, в которой он находится, в автономию, имеющую с ней общую сторону. Помогите Вениамину спланировать свое путешествие так, чтобы заполнить все оставшиеся страницы загранпаспорта и при этом сделать как можно меньше переездов между автономиями.
Вениамин начинает свое путешествие в родной автономии, которая принадлежит содружеству Крипто, а закончить путешествие может в любой автономии.
Формат входных данных
В первой строке входного файла содержатся три целых числа: w, h и n (1 ≤ w, h ≤ 500, 1 ≤ n ≤ 1 000). В каждой из следующих h строк содержится по w символов, они задают карту Евразии. Символ «A» обозначает автономию содружества Крипто, а «T» — автономию конфедерации Бюрро. Автономия, в которой Вениамин начинает свое путешествие, обозначена символом «V». Карта дана с севера на юг по строкам и с запада на восток по столбцам, таким образом, первый символ второй строки входного файла описывает самую северо-западную автономию. Гарантируется, что в Евразии есть хотя бы одна автономия Бюрро.
Формат выходных данных
В выходной файл выведите одну строку из символов «N», «E», «S», «W» — план путешествия Вениамина. Эти символы означают, что Вениамину следует поехать на север, восток, юг или запад, соответственно. Число перемещений в плане необходимо минимизировать, в процессе путешествия Вениамин должен ровно n раз въехать в автономию Бюрро. Если возможных оптимальных планов путешествия несколько, можно вывести любой.
| Ввод |
Вывод |
5 3 6
AAATA
VAATA
AAAAT |
EEENSNSN |
3 1 2
TVT |
WEE |
| |
|
|
Вирус
Двумерные массивы
Задача на реализацию
Способы задания графа
Обход в ширину
Двумерные массивы
В лаборатории биоинформатики ученые проводят эксперименты по распространению искусственно созданных вирусов. Для эксперимента используется специальная лабораторная установка, представляющая собой таблицу из n × m ячеек. В каждую ячейку помещается живая клетка. Ученые заражают вирусом некоторые клетки, всего исходно заражается не более 8 клеток.
Каждую секунду среди незараженных клеток, имеющих зараженную клетку в соседней по стороне ячейке, ровно одна клетка заражается вирусом.
Ученые заинтересовались, какие конфигурации зараженных клеток могут получиться через t секунд. Для начала они хотят посчитать число таких конфигураций. Помогите им это сделать.
Формат входных данных
В первой строке входного файла находятся целые числа n, m и t (1 ≤ n, m ≤ 100, 1 ≤ t ≤ 6) — размеры таблицы и количество секунд. Каждая из следющих n строк содержит m символов. Символ «.» означает, что в изначальной конфигурации клетка не заражена, а символ «*» — что заражена. Количество «*» в таблице не превышает 8. Гарантируется, что незараженных клеток в исходной конфигурации не меньше t.
Формат выходных данных
Выведите количество различных возможных конфигураций таблицы после t секунд.
| Ввод |
Вывод |
2 2 1
*.
.. |
2 |
2 2 2
*.
.. |
3 |
2 2 3
*.
.. |
1 |
| |
|
|
Лифт
Задача на реализацию
Сортировка событий
Использование сортировки
Множества
Структуры данных
В современном многоэтажном офисе крупной компании установлен новый лифт. В
компании работает 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
|
Пояснение к примеру
Пример работы лифта по шагам показан в следующей таблице.
Использованные в пояснении к примеру обозначения

| |
|
|
Римские числа
Задача на реализацию
Разбор случаев
Строки
Один древнеримский торговец брал несколько раз ссуду в древнеримском банке. Каждый раз банкир записывал размер выданной ссуды на листе пергамента, используя римские числа. Но ввиду дороговизны пергамента запись производилась плотно и все числа оказались записанными подряд, без разделителей. Когда торговец пришёл возвращать ссуду, оказалось, что невозможно установить разбиение записи на числа.
Например, если на пергаменте записана строка «XIIV», её можно разбить на римскиечисла разными способами, например, XI + IV = 11 + 4 = 15 или XII + V = 12 + 5 = 17, возможны и другие варианты разбиения.
Торговец хочет вернуть как можно меньше денег, поэтому он хочет так разбить строку цифр на римские числа, чтобы сумма всех чисел была как можно меньше.
Программа получает на вход строку, длина которой не превосходит 250 символов. Строка состоит только из заглавных латинских букв I, V, X, L, С, D, M.
Программа должна вывести единственное число – минимально возможную сумму, которую можно получить при разбиении данной строки на последовательность корректных римских чисел. Ответ нужно вывести арабскими цифрами в десятичной системе счисления.
Правила записи римских чисел
Римскими цифрами можно записать целые числа от 1 до 3999. Число представляется в виде суммы тысяч, сотен, десятков и единиц. Далее из следующей таблицы берётся по одному элементу, соответствующему тысячам, сотням, десяткам, единицам ровно в таком порядке.

Если число тысяч, сотен, десятков, единиц равно 0, то из соответствующего столбца ничего не берётся. Например, число 1990 записывается, как 1000 + 900 + 90 = MCMXС.
| |
|
|
Тройка
Задача на реализацию
Целые числа
У Олега есть карта «Тройка», на которой осталась одна поездка на наземном транспорте. От дома Олега до школы можно доехать на трамвае, троллейбусе или автобусе. Трамвай ходит через каждые 15 минут, троллейбус — через каждые 10 минут, автобус — через каждые 5 минут, при этом в 8:00 одновременно от остановки отправляются и трамвай, и троллейбус, и автобус (то есть трамвай отправляется в 8:00, 8:15, 8:30, 8:45, 9:00; троллейбус — в 8:00, 8:10, 8:20, 8:30, 8:40, 8:50, 9:00; автобус — в 8:00, 8:05, 8:10, 8:15 и т. д.). Трамвай едет до нужной остановки X минут, троллейбус — Y минут, автобус — Z минут.
Когда Олег пришёл на остановку, на часах было 8 часов M минут. Определите минимальное время, через которое Олег окажется на нужной ему остановке (считая время ожидания транспорта и время поездки на транспорте). Если какой-то транспорт отправляется в тот же момент, когда Олег пришёл на остановку, то Олег успевает на нём уехать.
Программа получает на вход сначала три целых положительных числа X, Y, Z, не превосходящие 100, записанные в отдельных строчках, — время поездки на трамвае, троллейбусе, автобусе соответственно. В четвёртой строке входных данных записано целое число M (0 ≤ M ≤ 59) — момент времени (в минутах), когда Олег пришёл на остановку.
Программа должна вывести одно натуральное число — минимально возможное суммарное время ожидания транспорта и поездки.
| Ввод |
Вывод |
Примечание |
25
10
20
12 |
18 |
Олег пришёл на остановку в 8:12. Ему нужно подождать 8 минут и сесть на троллейбус, который довезёт его за 10 минут. |
| |
|
|
Турнир
Задачи на моделирование
Задача на реализацию
Структуры данных
В турнире участвуют N команд. Турнир проводится по олимпийской системе (команды играют на вылет, проигравшие команды выбывают из турнира, выигравшие проходят в следующий тур, ничьих не бывает). Число команд в этой задаче будет степенью двойки: N = 2 k .
Все команды пронумерованы числами от 1 до N. В первом туре играют команды с номерами 1 и 2, 3 и 4, 5 и 6 и т. д., всего играется N/2 матчей. По результатам этих матчей команды выходят во второй тур. Во втором туре играют победители первой и второй игры первого тура, победители третьей и четвёртой игры первого тура и т. д. Они выходят в третий тур. В третьем туре играют вместе победители первой и второй игры второго тура, победители третьей и четвёртой игры второго тура и т. д.
Вам даны результаты всех матчей. Определите номер команды, которая стала победителем турнира.
В первой строке входных данных записано число N – количество команд, участвовавших в турнире. Оно является степенью двойки и может принимать значения от 20 = 1 до 216 = 65536. Следующие N − 1 строк содержат результаты всех сыгранных матчей. Первые N/2 строк из них являются результатами матчей первого тура, затем идёт N/4 строк с результатами второго тура, N/8 строк с результатами третьего тура и т. д.
Результат каждого матча является одним из двух возможных чисел: 1 или 2. Число 1 означает, что в матче выиграла первая команда (номер которой меньше), число 2 означает, что в матче выиграла вторая команда (номер которой больше).
Программа должна вывести одно число – номер победившей в турнире команды.
| Ввод |
Вывод |
8
1
2
2
1
2
1
1 |
4 |
Примечание к ответу
Далее нарисована схема турнира для примера из условия. В турнире участвовало 8 команд. Результаты матчей: 1, 2, 2, 1, 2, 1, 1.
В первом туре играли команды 1 и 2, 3 и 4, 5 и 6, 7 и 8. Результаты матчей первого тура: 1, 2, 2, 1, во второй тур вышли команды 1, 4, 6, 7.
Во втором туре играли команды 1 и 4, 6 и 7. Результаты матчей второго тура: 2, 1.
В третий тур вышли команды 4 и 6. В последнем, третьем, туре играют команды 4 и 6, результат матча: 1, поэтому победителем турнира является команда 4.
| |
|
|
Новое --- это хорошо забытое старое
Строки
Задача на реализацию
Московские библиотеки имеют электронный сервис, с помощью которого можно бесплатно получить издание, несколько лет не востребованное читателями. Андрея заинтересовала красочная энциклопедия, правда изданная в прошлом веке на неизвестном ему языке.
Получив желаемое издание, он стал его изучать, открывая в произвольных местах. На одной из открытых страниц было всего две статьи, название первой из них можно было легко прочитать, так как оно было записано английскими буквами, а буквы в названии второй из них оказались практически затертыми. Легко определить было только что остались следы от \(k\) букв. Очевидно также, что второе название стоит в алфавитном порядке позже, чем первое. Это означает, что либо первая не совпадающая в написании двух слов буква в первом слове стоит в алфавите раньше, чем соответствующая буква второго слова, либо начало второго слова полностью совпадает с первым словом, но при этом второе слово длиннее первого (содержит еще какие то буквы).
Андрей не знает язык, на котором написана энциклопедия, поэтому он предположил, что второе слово состоит из тех же букв, что и первое. Чтобы проверить свое предположение, он собирается искать предполагаемое слово в интернете.
Помогите Андрею найти первое следующее в алфавитном порядке слово, состоящее из тех же букв, что и заданное слово, и состоящее ровно из \(k\) букв. Гарантируется, что такое слово существует.
Формат входных данных
В первой строке задано целое число \(n\) (\(1 \leq n \leq 100\,000\)) — количество букв в первом слове.
Во второй строке задано слово, состоящее из \(n\) строчных букв английского алфавита.
В третьей строке задано целое число \(k\) (\(1 \leq k \leq 100\,000\)) — количество букв в искомом слове.
Формат выходных данных
Выведите искомое слово, состоящее из \(k\) букв, входящих в первое слово.
Примечание
В первом тестовом примере требуемое слово должно состоять из букв a, b и c. Следующим после abc в алфавитном порядке будет слово abca, но оно состоит из 4 букв, а не из 3. Следующим после abc в алфавитном порядке состоящим из букв a, b и c и имеющим длину 3 будет слово aca.
В данной задаче \(50\) тестов, помимо тестов из условия.
Не менее чем в 15 тестах первое слово будет состоять только из букв abc, причем каждая из трех букв будет встречаться.
Решения, работающие при \(1 \leq n, k \leq 3\) будут набирать не менее \(10\) баллов.
Решения, работающие при \(1 \leq n, k \leq 10\) будут набирать не менее \(30\) баллов.
Решения, работающие при \(1 \leq n, k \leq 5\,000\) будут набирать не менее \(60\) баллов.
| |
|
|
Умный обогреватель
Бинарный поиск
Задача на реализацию
Квартира Максима еще не прошла реновацию, поэтому температура в ней сильно зависит от температуры на улице. Для поддержания комфортной температуры он купил обогреватель и установил систему <<Умный дом>>. В соответствующую программу Максим заложил два целых числа \(t_{min} \leq t_{max}\) и следующий алгоритм использования обогревателя:
-
Если в течение последних пяти дней до текущего дня включительно обогреватель каждый день был выключен, и в каждый из этих дней температура на улице была строго меньше \(t_{min}\), то надо включить обогреватель в этот день и считать, что он был включен весь день. Обогреватель остается включенным и в последующие дни до тех пор, пока программа его не выключит.
-
Если в течение последних пяти дней до текущего дня включительно обогреватель каждый день был включен, и в каждый из этих дней температура на улице была строго больше \(t_{max}\), то надо выключить обогреватель в этот день и считать, что он был выключен весь день. Обогреватель остается выключенным и в последующие дни до тех пор, пока программа его не включит.
Из-за кратковременного отключения электроэнергии программу необходимо настроить заново. Сами значения \(t_{min}\) и \(t_{max}\) Максим забыл, зато у него остались записи программы о температуре и состоянии обогревателя в каждые из \(n\) дней использования системы.
Максим помнит, что \(t_{min}\) и \(t_{max}\) были целыми числами, по модулю не превосходящими \(10^9\) и \(t_{min} \leq t_{max}\), также он помнит, что программа не учитывала дни до первого дня использования системы и не включала обогреватель в течение первых четырех дней. Наконец, Максим помнит, что он выбирал \(t_{min}\) и \(t_{max}\) как можно более близкими друг к другу.
Помогите найти два подходящих значения \(t_{min}\) и \(t_{max}\), не превосходящих \(10^9\) по абсолютной величине, таких, что выполняются правила использования обогревателя в каждые из \(n\) дней, \(t_{min}\) не превосходит \(t_{max}\) и величина \(t_{max} - t_{min}\) минимальна.
Гарантируется, что записи программы правильные, и такие два числа существуют.
Формат входных данных
В первой строке задано целое число \(n\) (\(5 \leq n \leq 10^5\)) — количество дней, в течение которых работала система.
Во второй строке входных данных задаются \(n\) целых чисел \(t_1, \dots, t_n\) (\(-10^9 \leq t_i \leq 10^9\)) — температуры на улице в каждый из \(n\) дней.
В третьей строке входных данных задается строка из \(n\) символов, состоящая из 0 и 1 — если в \(i\)-й позиции данной строки записан 0, то это значит, что в \(i\)-й день обогреватель был выключен, а если 1, — то включен.
Формат выходных данных
В единственной строке выведите два целых числа \(t_{min}\) и \(t_{max}\) (\(t_{min} \leq t_{max}\)), по модулю не превосходящих \(10^9\) — значения температур, при вставке которых в программу обогреватель будет включен и выключен в те же дни, в которые он был включен и выключен при исходных значениях, а значение \(t_{max} - t_{min}\) минимально.
Если подходящих пар значений несколько, выведите любую из них.
Примечание
В первом тестовом примере первые пять дней температура строго меньше \(7\) градусов, при этом до пятого дня обогреватель был в каждый из четырех дней выключен, следовательно в пятый день программа его включила. На данный тест корректен любой ответ удовлетворяющий условию \(6 \leq t_{min} = t_{max} \leq 10^9\).
| |
|
|
Проверка на списывание
Задача на реализацию
Вы создали очередную платформу для проведения онлайн соревнований по программированию. После первого контеста вы изучили решения участников и заметили, что некоторые списывают друг у друга. После этого вам захотелось написать программу, чтобы быстрее обнаруживать списывания и блокировать нечестных участников.
Пусть есть две строки, описывающие решения. Рассмотрим не более одного раза каждый символ, хотя бы где-то входящий в первую строку. После этого для рассматриваемого символа \(x\) определим другой символ \(p(x) \neq x\) и заменим некоторые вхождения \(x\) в первое решение на \(p(x)\). Если в ходе такого процесса из первого решения возможно получить второе, то скажем, что второе решение списано с первого.
Иными словами, участник копирует чужое решение и, чтобы списывание не было таким очевидным, один раз рассматривает некоторые различные символы \(x\), которые хотя бы раз встречаются в первом решении. Для каждого такого символа \(x\) он выбирает, на какой другой символ \(p(x)\) он будет заменять его вхождения, после чего проходит по строке и заменяет в ней \(x\) на \(p(x)\), но на некоторых позициях забывает это сделать (или там замена невозможна).
Значения \(p(x)\) участником выбираются независимо для разных \(x\), поэтому они могут и совпасть.
Напишите программу, которая позволит обнаружить списывания такого рода.
Кроме платформы вы создали язык программирования S++ и, чтобы его популяризировать, вы решили разрешить сдавать задачи в своей системе только на нем. Одной из особенностью языка является то, что любая программа записывается в одну строку и может состоять только из строчных и заглавных букв английского алфавита (a-z, A-Z), цифр (0-9), скобок (‘(’, ‘)’, ‘{’, ‘}’ ‘[’, ‘]’), знаков сравнения (‘<’, ‘>’, ‘=’) и символов ‘+’, ‘-’, ‘*’, ‘/’, ‘;’.
Формат входных данных
В первой строке вам дано число \(n\) \((1 \leqslant n \leqslant 200\,000)\), равное длине каждой из программ.
Во второй строке вам дана программа первого участника на языке S++.
В третьей строке вам дана программа второго участника на языке S++.
Формат выходных данных
Если вторая программа списана с первой, выведите <<YES>> (без кавычек), на следующей строке выведите \(m\) – количество различных символов в первой программе, которые хотя бы раз заменялись. Обозначим эти символы за \(c_1,\ c_2,\ \ldots, \ c_m\). После этого выведите \(m\) строк. На \(i\)-й строке необходимо вывести символы \(c_i\) и \(p(c_i)\) через пробел. Если вторая программа не списана с первой, то выведите <<NO>> (без кавычек).
Примечание
В первом примере списывающий заменил все вхождения ‘i’ на ‘j’ и вхождения ‘n’ на ‘m’.
Во втором примере участник заменял ‘a’ на ‘e’, ‘b’ на ‘f’, ‘с’ на g’ и ‘-’ на ‘+’.
В третьем примере невозможно осуществить процесс замен так, чтобы из первой строки получилась вторая.
В четвертом примере участник списал, заменив некоторые вхождения ‘a’ на ‘b’.
В пятом примере участник списал, заменив некоторые вхождения ‘a’ на ‘b’ и все вхождения ‘c’ на ‘a’.
| |
|
|
Преобразование строки
Задача на реализацию
Даны две строки \(S\) и \(T\) из строчных букв английского алфавита.
Посмотрим на следующий процесс. Рассмотрим не более одного раза каждый символ, хотя бы где-то входящий в первую строку. После чего, для рассматриваемого символа \(x\) определим другой символ \(p(x) \neq x\) и заменим некоторые вхождения \(x\) в \(S\) на \(p(x)\). Определите, возможно ли в ходе такого процесса получить из строки \(S\) строку \(T\). При этом разные символы можно заменять на один и тот же символ или на символ, который заменяться не будет.
Например, пусть \(S =\) <<aabab>>, \(T =\) <<abbbc>>. Из \(S\) можно получить \(T\), если выбрать p(‘a’) = ‘b’, p(‘b’) = ‘c’ и заменить второе и третье вхождение ‘a’ на p(‘a’), второе вхождение ‘b’ на p(‘b’).
А если \(S =\) <<aabaс>>, \(T =\) <<bbbbb>>, то все вхождения ’a’ и ’c’ были заменены на ’b’.
Формат входных данных
В первой строке вам дано число \(n\) \((1 \leqslant n \leqslant 200\,000)\). Во второй строке задана \(S\). В третьей строке задана \(T\). Обе строки имеют длину \(n\) и состоят только из букв от ‘a’ до ‘z’.
Формат выходных данных
Если возможно осуществить описанный процесс так, чтобы из \(S\) получилась \(T\), выведите <<YES>>, на следующей строке выведите \(m\) – количество различных символов \(S\), которые хотя бы раз заменялись. Обозначим эти символы за \(c_1,\ c_2,\ \ldots \ c_m\). После чего выведите \(m\) строк. На \(i\)-й строке необходимо вывести символы \(c_i\) и \(p(c_i)\) через пробел. Если это сделать невозможно, выведите <<NO>>.
| |
|
|
Дневник дождя
Разбор случаев
Задача на реализацию
Петя живёт в Санкт-Петербурге и увлекается метеорологией. Из научного интереса он решил подтвердить или опровергнуть мнение о том, что в Санкт-Петербурге постоянно идёт дождь. Для этого Петя завёл дневник дождя и раз в неделю в воскресенье оставляет в нём запись с информацией о том, идёт ли дождь. Каждую запись Петя подписывает номером текущего дня в месяце, дни в месяце нумеруются с 1 до числа дней в этом месяце (от 28 до 31 в разных месяцах).
Сегодня Петя открыл дневник, чтобы сделать очередную запись, и обнаружил, что он сделал последнюю запись две недели назад, а в прошлое воскресенье забыл занести информацию в дневник. Петя помнит, что неделю назад шёл дождь, и он решил сделать две записи: за сегодняшний день и за прошлое воскресенье. Он знает номер текущего дня в месяце \(n\) и видит, каким числом \(m\) подписана запись две недели назад. Каким числом Петя должен подписать запись за прошлую неделю?
Формат входных данных
В первой строке вывода даны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 31\)) — номер текущего дня месяца и число, которым подписана запись две недели назад.
Формат выходных данных
Выведите единственное число – каким числом должна быть подписана запись неделю назад.
| |
|
|
Магнитные игры
Задача на реализацию
У Вовы есть любимый магнит. Вове очень нравится играть с ним на большой поляне, которую можно представить в виде прямоугольника \(n\) на \(m\) клеток.
Однажды он пришел играть на поляну с магнитом и потерял его в одной из клеток. Вова очень расстроился, но нашел решение — в каждую клетку поляны он положил компас, стрелка которого может принимать 8 положений: вверх, вверх-вправо, вправо, вниз-вправо, вниз, вниз-влево, влево и вверх-влево. Каждому положению стрелки соответствует его номер:
Стрелки принимают направление, близкое к направлению на магнит: если магнит лежит строго по диагонали от компаса, то его стрелка примет диагональное положение, иначе — более близкое к направлению на магнит из вертикального и горизонтального. Стрелка компаса в клетке с магнитом может быть направлена куда угодно.

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

Рисунок для примера из входных данных с учетом аномалии.
Теперь Вова не знает, как ему найти свой магнит, и просит помощи у вас.
Формат входных данных
В первой строке входных данных записаны два целых числа через пробел \(n\) и \(m\) — размеры поляны (\(2 \le n, m \le 1500, nm \ge 6\)).
В следующих \(n\) строках описываются компасы на поляне.
В \(i\)-й строке записаны \(m\) целых чисел \(a_{i,j}\) (\(1 \le a_{i,j} \le 8\)), \(j\)-е число в \(i\)-й строке обозначает направление стрелки компаса в \(j\)-й клетке \(i\)-й строки.
Формат выходных данных
В первой строке выведите два числа \(x\) и \(y\) через пробел — номер строки и столбца клетки, в которой лежит магнит.
Во второй выведите два числа \(a\) и \(b\) через пробел — номера горизонтали и вертикали, в которых действует аномалия.
Замечание
В данном тесте магнит лежит в клетке \((2, 1)\), инвертируется горизонталь номер \(3\) и вертикаль номер \(3\).
| |
|
|
Жидко-кристаллический дисплей
Задача на реализацию
На жидкокристаллическом дисплее с разрешением \(h\times w\) используются пиксели трех цветов: красного, зеленого и синего. Будем обозначать их заглавными английскими буквами ‘R’, ‘G’ и ‘B’, соответственно.
Поскольку человеческий глаз имеет максимальную чувствительность к зеленому цвету, зеленых пикселей на дисплее примерно в два раза больше, чем красных и чем синих. Пиксели в каждой строке чередуются: каждый второй пиксель зеленый, а среди остальных чередуются красные и синие пиксели.
В первой строке первый пиксель <<R>>, а каждая следующая строка сдвинута на один налево относительно предыдущей: во второй первый пиксель <<G>>, а второй <<B>>, в третьей первый пиксель <<B>>, в четвертой первый пиксель <<G>>, а второй <<R>>, и так далее.
Выведите, как расположены пиксели на экране.
Формат входных данных
На вход подаются целые числа \(h\) и \(w\), по одному на строке (\(1 \le h, w \le 100\)).
Формат выходных данных
Выведите \(h\) строк по \(w\) символов — цвета пикселей на дисплее.
| |
|
|
Покраска холста
Задача на реализацию
Радиоуправляемый робот умеет перемещаться по клетчатому полю размером \(n \times m\) (\(n\) строк и \(m\) столбцов) и красить клетки в один из четырех цветов (красный, зеленый, синий и белый). Будем обозначать клетку на пересечении \(i\)-й сверху строки и \(j\)-го слева столбца как \((i, j)\).
Робот выполняет команды пользователя, при этом перемещаясь по полю в соответствии с заданными настройками и ограничениями.
Настройки представляют собой матрицу \(S\) размера \(n \times m\), каждый элемент которой — либо \(\varnothing\), либо пара из направления (вправо, вверх, влево, вниз) и цвета. Если \(S_{i,j} = (d, c)\), то после того, как робот красит клетку \((i, j)\) в какой-либо цвет, он сразу же смещается на одну клетку в направлении \(d\) и красит ее в цвет \(c\). Если для новой покрашенной клетки \(S_{i',j'} \neq \varnothing\), процесс продолжается по тем же правилам.
Ограничения бывают двух типов:
-
ограничение на максимальное разрешенное число клеток цвета \(c\);
-
запрет наличия на поле квадрата \(2 \times 2\), покрашенного цветами \(\begin{pmatrix} c_{1,1} & c_{1,2} \\ c_{2,1} & c_{2,2} \end{pmatrix}\).
Пользователю доступны следующие команды для взаимодействия с роботом:
-
<<color \(i\) \(j\) \(c\)>> — закрасить клетку \((i, j)\) в цвет \(c\), после чего выполнять действия в соответствии с настройками; процесс останавливается, когда
-
очередное перемещение привело робота за границу поля;
-
очередное перемещение привело робота в клетку, которую он уже красил в процессе выполнения текущей команды;
-
для очередной клетки \(S_{i',j'} = \varnothing\);
-
с очередной покраской перестанет выполняться какое-то из ограничений.
Обратите внимание, что если первая же покраска клетки \((i, j)\) в цвет \(c\) приводит к нарушению какого-то из ограничений, робот остановится сразу же, не покрасив ни одну клетку.
-
<<limit \(c\) \(x\)>> — выставить ограничение на максимальное число клеток цвета \(c\) в \(x\). Если в настоящий момент на поле уже больше \(x\) клеток цвета \(c\), команда игнорируется и ограничение не меняется. Для каждого цвета в каждый момент времени действует только последнее введенное на него ограничение на число клеток.
-
<<block \(c_{1,1}\) \(c_{1,2}\) \(c_{2,1}\) \(c_{2,2}\)>> — запретить появление квадратов \(2 \times 2\), раскрашенных цветами \(\begin{pmatrix} c_{1,1} & c_{1,2} \\ c_{2,1} & c_{2,2} \end{pmatrix}\). Если в настоящий момент на поле уже есть квадрат, раскрашенный таким образом, команда игнорируется и ограничение не добавляется.
-
<<allow \(c_{1,1}\) \(c_{1,2}\) \(c_{2,1}\) \(c_{2,2}\)>> — аналогично, отменить запрет на раскрашенные соответствующим образом квадраты \(2 \times 2\), если такой запрет сейчас есть.
-
<<settings \(i\) \(j\) \(d\) \(c\)>> — выставить настройки для клетки \((i, j)\) в значение \((d, c)\), где \(d\) — направление перемещения, а \(c\) — цвет, в который затем будет раскрашена клетка, в которую робот переместится.
-
<<settings \(i\) \(j\) none>> — выставить настройки для клетки \((i, j)\) в значение \(\varnothing\), соответствующее отсутствию перемещения после покраски клетки \((i, j)\).
Еще раз повторим, что робот никогда не красит одну и ту же клетку дважды во время исполнения одной команды, а также останавливается до момента первого нарушения какого-либо ограничения. Например, если \(S_{1,1} = (\rightarrow, \mathtt{red})\), \(S_{1,2} = (\downarrow, \mathtt{blue})\), \(S_{2,2} = (\leftarrow, \mathtt{green})\) и \(S_{2,1} = (\uparrow, \mathtt{red})\), то при поступлении команды <<color \(1\) \(1\) blue>>, робот покрасит \((1, 1)\) в синий, \((1, 2)\) в красный, \((2, 2)\) в синий и \((2, 1)\) в зеленый. Затем робот остановится, так как клетка \((1, 1)\) уже была покрашена при исполнении этой команды.
Изначально все настройки равны \(\varnothing\), никакие ограничения не введены, а все клетки поля покрашены в белый цвет. Вам дан список из \(q\) команд пользователя, которые были последовательно отправлены роботу. Выведите раскраску поля после применения всех этих команд.
Формат входных данных
В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — число наборов входных данных в тесте.
В первой строке каждого набора данных даны три целых положительных числа \(n\), \(m\) и \(q\) — размеры поля и число команд. Гарантируется, что сумма \(n \cdot m \cdot q\) по всем наборам входных данных не превосходит \(10^5\).
В следующих \(q\) строках дано описание команд, посланных роботу в формате, описанном в условии. Направления задаются строками <<right>> (вправо), <<up>> (вверх), <<left>> (влево), <<down>> (вниз). Цвета задаются заглавными буквами ‘R’ (красный), ‘G’ (зеленый), ‘B’ (синий) и ‘W’ (белый).
Формат выходных данных
Для каждого набора входных данных выведите итоговую раскраску поля, полученную после обработки всех команд.
Примечание
В первом примере из условия
-
Команда <<color 1 1 R>> красит \((1, 1)\) в красный, после чего из-за \(S_{1,1} = (\downarrow, \mathtt{red})\) клетка \((2, 1)\) тоже красится в красный, а из-за \(S_{2,1} = (\downarrow, \mathtt{red})\) затем и \((3, 1)\) красится в красный.
-
При выполнении <<color 2 1 G>> робот красит \((2, 1)\) в зеленый. \(S_{2,1}\) в этот момент уже равно \((\rightarrow, \mathtt{blue})\), поэтому после этого клетка \((2, 2)\) должна быть покрашена в синий, но это бы нарушило ограничение <<limit B 0>>, поэтому процесс останавливается до этого.
-
После этого поле выглядит как
-
Затем <<color 2 2 R>> должен покрасить \((2, 2)\) в красный, но это бы привело к получению квадрата с цветами RWGR, который запрещен, поэтому выполнение команды сразу останавливается.
-
Последняя команда покраски <<color 2 2 B>> отрабатывает корректно, так как до этого было разрешено иметь на поле не больше \(1\) синей клетки. После чего, в соответствии с \(S_{2,2} = (\uparrow, \mathtt{green})\), клетка \((1, 2)\) красится в зеленый.
-
Итоговый рисунок:
| |
|
|
Покраска холста - 2
Задача на реализацию
Радиоуправляемый робот умеет перемещаться по клетчатому полю размером \(n \times m\) (\(n\) строк и \(m\) столбцов) и красить клетки в один из четырех цветов (красный, зеленый, синий и белый). Будем обозначать клетку на пересечении \(i\)-й сверху строки и \(j\)-го слева столбца как \((i, j)\).
Робот выполняет команды пользователя, при этом перемещаясь по полю в соответствии с заданными настройками и ограничениями.
Настройки представляют собой матрицу \(S\) размера \(n \times m\), каждый элемент которой — либо \(\varnothing\), либо пара из координат клетки и цвета. Если \(S_{i,j} = ((i', j'), c)\), то после того, как робот красит клетку \((i, j)\) в какой-либо цвет, он сразу же перемещается в клетку \((i', j')\) и красит ее в цвет \(c\). Если для новой покрашенной клетки \(S_{i',j'} \neq \varnothing\), процесс продолжается по тем же правилам.
Ограничения бывают двух типов:
-
ограничение на минимальное требуемое число клеток цвета \(c\);
-
запрет наличия на поле квадрата \(2 \times 2\), покрашенного цветами \(\begin{pmatrix} c_{1,1} & c_{1,2} \\ c_{2,1} & c_{2,2} \end{pmatrix}\).
Пользователю доступны следующие команды для взаимодействия с роботом:
-
<<fill \(i\) \(j\) with \(c\)>> — закрасить клетку \((i, j)\) в цвет \(c\), после чего выполнять действия в соответствии с настройками; процесс останавливается, когда
-
очередное перемещение привело робота за границу поля;
-
очередное перемещение привело робота в клетку, которую он уже красил в процессе выполнения текущей команды;
-
для очередной клетки \(S_{i',j'} = \varnothing\);
-
с очередной покраской перестанет выполняться какое-то из ограничений.
Обратите внимание, что если первая же покраска клетки \((i, j)\) в цвет \(c\) приводит к нарушению какого-то из ограничений, робот остановится сразу же, не покрасив ни одну клетку.
-
<<at-least \(x\) \(c\)>> — выставить ограничение на минимальное число клеток цвета \(c\) в \(x\). Если в настоящий момент на поле меньше \(x\) клеток цвета \(c\), команда игнорируется и ограничение не меняется. Для каждого цвета в каждый момент времени действует только последнее введенное на него ограничение на число клеток.
-
<<no-squares \(c_{1,1}\) \(c_{1,2}\) \(c_{2,1}\) \(c_{2,2}\)>> — запретить появление квадратов \(2 \times 2\), раскрашенных цветами \(\begin{pmatrix} c_{1,1} & c_{1,2} \\ c_{2,1} & c_{2,2} \end{pmatrix}\). Если в настоящий момент на поле уже есть квадрат, раскрашенный таким образом, команда игнорируется и ограничение не добавляется.
-
<<allow-squares \(c_{1,1}\) \(c_{1,2}\) \(c_{2,1}\) \(c_{2,2}\)>> — аналогично, отменить запрет на раскрашенные соответствующим образом квадраты \(2 \times 2\), если такой запрет сейчас есть.
-
<<move \(i\) \(j\) to \(i'\) \(j'\) \(c\)>> — выставить настройки для клетки \((i, j)\) в значение \(((i', j'), c)\), где \((i', j')\) — клетка, в которую надо переместиться, а \(c\) — цвет, в который затем надо ее покрасить.
-
<<no-move \(i\) \(j\)>> — выставить настройки для клетки \((i, j)\) в значение \(\varnothing\), соответствующее отсутствию перемещения после покраски клетки \((i, j)\).
Еще раз повторим, что робот никогда не красит одну и ту же клетку дважды во время исполнения одной команды, а также останавливается до момента первого нарушения какого-либо ограничения. Например, если \(S_{1,1} = ((1, 2), \mathtt{red})\), \(S_{1,2} = ((2, 2), \mathtt{blue})\), \(S_{2,2} = ((2, 1), \mathtt{green})\) и \(S_{2,1} = ((1, 1), \mathtt{red})\), то при поступлении команды <<fill \(1\) \(1\) with blue>>, робот покрасит \((1, 1)\) в синий, \((1, 2)\) в красный, \((2, 2)\) в синий и \((2, 1)\) в зеленый. Затем робот остановится, так как клетка \((1, 1)\) уже была покрашена при исполнении этой команды.
Изначально все настройки равны \(\varnothing\), никакие ограничения не введены, а все клетки поля покрашены в белый цвет. Вам дан список из \(q\) команд пользователя, которые были последовательно отправлены роботу. Выведите раскраску поля после применения всех этих команд.
Формат входных данных
В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — число наборов входных данных в тесте.
В первой строке каждого набора данных даны три целых положительных числа \(n\), \(m\) и \(q\) — размеры поля и число команд. Гарантируется, что сумма \(n \cdot m \cdot q\) по всем наборам входных данных не превосходит \(10^5\).
В следующих \(q\) строках дано описание команд, посланных роботу в формате, описанном в условии. Цвета задаются строками <<red>> (красный), <<green>> (зеленый), <<blue>> (синий) и <<white>> (белый).
Формат выходных данных
Для каждого набора входных данных выведите итоговую раскраску поля, полученную после обработки всех команд. Для обозначения красного, зеленого или синего цвета используйте первую букву его английской записи (‘r’, ‘g’ или ‘b’); для обозначения белого цвета используйте символ ‘.’.
Примечание
В первом примере из условия
-
Команда <<fill 1 1 with red>> красит \((1, 1)\) в красный, после чего из-за \(S_{1,1} = ((2, 1), \mathtt{red})\) клетка \((2, 1)\) тоже красится в красный, а из-за \(S_{2,1} = ((3, 1), \mathtt{red})\) затем и \((3, 1)\) красится в красный.
-
При выполнении <<fill 2 1 with green>> робот красит \((2, 1)\) в зеленый. \(S_{2,1}\) в этот момент уже равно \(((2, 2), \mathtt{blue})\), поэтому после этого клетка \((2, 2)\) должна быть покрашена в синий, но это бы нарушило ограничение <<at-least 3 white>>, поэтому процесс останавливается до этого.
-
После этого поле выглядит как
-
Затем <<fill 2 2 with R>> должен покрасить \((2, 2)\) в красный (ограничение на число белых уже снято), но это бы привело к получению квадрата с цветами r.gr, который запрещен, поэтому выполнение команды сразу останавливается.
-
Последняя команда покраски <<fill 2 2 with B>> выполняется. После чего, в соответствии с \(S_{2,2} = ((1, 2), \mathtt{green})\), клетка \((1, 2)\) красится в зеленый.
-
Итоговый рисунок:
| |
|
|
Набор в космическую академию
матрицы
ЕГЭ_информатика
ЕГЭ-26. Обработка массива целых чисел. Сортировка
реализация
Задача на реализацию
Массивы
ЕГЭ - вычислительные задачи
Космическая Академия «Звёздный Путь» проводит ежегодный набор курсантов. Отбор кандидатов происходит по сумме баллов трёх вступительных испытаний (физическая подготовка, математика, астронавигация) и собеседования с приёмной комиссией.
На заранее известное количество мест отбираются кандидаты, набравшие наибольшую сумму баллов по результатам трёх испытаний. Все кандидаты, набравшие определённую сумму баллов или больше, зачисляются на имеющиеся места. Такой балл называется проходным.
Если после заполнения имеющихся мест кандидатами с проходным баллом остаются незаполненные места, но кандидатов, набравших следующую сумму баллов, больше, чем вакантных мест, набранная этими кандидатами сумма баллов называется полупроходным баллом.
Из числа кандидатов, набравших полупроходной балл, на имеющиеся места принимаются кандидаты, имеющие более высокий балл за собеседование. Если два кандидата с полупроходным баллом имеют одинаковый балл за собеседование, то проходит тот кандидат, значение ID которого выше.
Для данного множества кандидатов определите полупроходной балл, а также ID кандидата с полупроходным баллом, который будет зачислен последним (займёт последнее свободное место).
Формат входных данных
В первой строке находятся два числа:
- N — количество кандидатов (натуральное число, не превышающее 10000)
- S — количество имеющихся мест (натуральное число, S ≤ N)
Каждая из следующих N строк содержит пять чисел:
- ID кандидата (натуральное число, не превышающее 10 000 000)
- три оценки по испытаниям (целые неотрицательные числа, не превышающие 100)
- балл за собеседование (целое неотрицательное число, не превышающее 10)
Гарантируется, что в исходных данных существует полупроходной балл.
Формат выходных данных
Два целых числа через пробел: полупроходной балл и ID кандидата с полупроходным баллом, занявшего последнее место.
Примечание
В первом тестовом примере
- ID=1001: сумма экзаменов = 270, собеседование = 10 → проходит (проходной балл)
- ID=1002: сумма = 240, собеседование = 8 → полупроходной балл, проходит
- ID=1003: сумма = 240, собеседование = 5 → не проходит (собеседование меньше)
- ID=1004: сумма = 210, собеседование = 10
Мест: 2. Кандидат с ID=1001 проходит автоматически. Осталось 1 место, но с суммой 240 — два кандидата. Это полупроходной балл. Между ними выбираем по собеседованию: ID=1002 (собес 8) > ID=1003 (собес 5).
Во втором тестовом примере
Все кандидаты имеют одинаковую сумму баллов (240) и одинаковый балл за собеседование (5). Мест: 2. Выбираем по ID в порядке убывания: сначала 503, затем 502. Последний зачисленный — кандидат с ID=502.
| |
|
|
Подводная станция
матрицы
ЕГЭ_информатика
ЕГЭ - вычислительные задачи
ЕГЭ-26. Обработка массива целых чисел. Сортировка
реализация
Задача на реализацию
Массивы
На подводной исследовательской станции «Нептун-7» требуется установить новый научный модуль. Станция состоит из M уровней (пронумерованных от 1 до M сверху вниз, где уровень 1 ближе всего к поверхности) и K отсеков на каждом уровне.
Некоторые отсеки уже заняты оборудованием. По требованиям безопасности, новый модуль нужно разместить так, чтобы над ним (на уровнях с меньшими номерами) было как можно больше подряд идущих свободных отсеков с тем же номером — это обеспечивает путь аварийной эвакуации к поверхности.
Если несколько отсеков имеют одинаковое максимальное количество свободных отсеков над ними, выбирается отсек на уровне ближе к поверхности (с меньшим номером уровня).
Гарантируется, что хотя бы один свободный отсек на станции существует.
Формат входных данных
В первой строке находятся три числа:
- N — количество занятых отсеков (1 ≤ N ≤ 10 000)
- M — количество уровней (1 ≤ M ≤ 100 000)
- K — количество отсеков на каждом уровне (1 ≤ K ≤ 100 000)
В следующих N строках находятся пары натуральных чисел: номер уровня и номер отсека занятого места соответственно.
Формат выходных данных
Два целых числа через пробел:
- Номер уровня выбранного отсека
- Количество свободных отсеков над ним (подряд, с тем же номером)
| |
|
|
Космический техосмотр
матрицы
ЕГЭ_информатика
ЕГЭ - вычислительные задачи
ЕГЭ-26. Обработка массива целых чисел. Сортировка
реализация
Задача на реализацию
Массивы
На орбитальной станции «Галактика-7» завершился ежегодный технический осмотр космических кораблей. По его результатам каждый корабль получил:
- Оценки трёх бортовых систем: двигательной, навигационной и системы жизнеобеспечения (по шкале от 2 до 5, где 2 — критическая неисправность, 5 — отличное состояние)
- Статус лицензии пилота: действующая или просроченная
Корабль допускается к полётам, если выполнены оба условия:
- Все три бортовые системы имеют оценку 3 или выше
- Лицензия пилота действующая
Корабль не допущен к полётам, если хотя бы одно из условий не выполнено.
Руководство станции решило предоставить возможность экстренного ремонта одной системы одному из кораблей. Корабль может претендовать на ремонт, если:
- Лицензия пилота действующая
- Ровно одна система имеет критическую неисправность (оценка 2), а две другие системы исправны (оценка 3 или выше)
Если таких кораблей несколько, выбирается тот, у которого наибольшая сумма оценок всех трёх систем (такой корабль ближе всего к допуску).
Гарантируется, что ровно один корабль удовлетворяет всем критериям отбора.
Формат входных данных
В первой строке находится число N — количество кораблей (1 ≤ N ≤ 1000).
Каждая из следующих N строк содержит пять целых чисел через пробел:
- ID — бортовой номер корабля (натуральное число, не превышающее 108)
- S1, S2, S3 — оценки трёх бортовых систем (каждая от 2 до 5)
- L — статус лицензии пилота (1 — действующая, 0 — просроченная)
Формат выходных данных
Выведите два числа через пробел:
- Количество кораблей, не допущенных к полётам
- Бортовой номер корабля, который получит возможность экстренного ремонта
| |
|
|
Серверные стойки
матрицы
ЕГЭ_информатика
реализация
Задача на реализацию
В новом датацентре «Кибер-Облако» серверы размещаются в стойках, которые расположены рядами. Ряды пронумерованы натуральными числами. Слоты в каждом ряду также пронумерованы натуральными числами начиная с единицы.
По данным инвентаризации известно, в каких рядах и в каких слотах уже установлены серверы. Администратору нужно разместить новое оборудование: кластер из ровно 25 серверов, которые должны располагаться в соседних слотах одного ряда.
Для надёжной работы кластера требуется, чтобы непосредственно слева и справа от него в том же ряду уже были установлены работающие серверы (они будут выполнять роль шлюзов).
Найдите ряд с наибольшим номером, в котором есть ровно 25 свободных слотов подряд, ограниченных занятыми слотами с обеих сторон.
Гарантируется, что существует хотя бы один ряд, удовлетворяющий условию.
Формат входных данных
В первой строке находится число N — количество установленных серверов (натуральное число, не превышающее 20000).
Каждая из следующих N строк содержит два натуральных числа, не превышающих 10000:
- номер ряда
- номер слота в этом ряду
Формат выходных данных
Два целых числа через пробел: наибольший номер ряда и наименьший номер слота в выбранной последовательности из 25 свободных мест.
| |
|
|
Сигналы со спутника
матрицы
реализация
Задача на реализацию
сортировки
Космическая станция «Орион» принимает сигналы от спутников-разведчиков. Приёмная матрица станции имеет размер 640 строк на 480 позиций. При получении каждого сигнала в журнал записываются координаты активированного элемента матрицы: номер строки и номер позиции в строке.
Элемент матрицы, который принял хотя бы один сигнал, считается активным. Элемент, который не принял ни одного сигнала, считается неактивным.
Для анализа качества связи нужно найти наибольшую непрерывную цепочку активных элементов в одной строке.
Определите наибольшую длину цепочки активных элементов, расположенных подряд в одной строке, и номер этой строки. Если таких строк несколько, укажите максимальный из их номеров.
Формат входных данных
В первой строке записано целое число N — количество принятых сигналов (1 ≤ N ≤ 10000).
В каждой из следующих N строк записаны по два числа через пробел:
- номер строки (целое число от 1 до 640)
- номер позиции в строке (целое число от 1 до 480)
Один и тот же элемент матрицы может получить несколько сигналов (координаты могут повторяться).
Формат выходных данных
Два целых числа через пробел: наибольшая длина цепочки активных элементов и номер строки, в которой она находится.
| |
|
|
Не все специи одинаково полезны
Задача на реализацию
Перебор
В ресторане отеля есть \(n\) видов специй. Каждый день повар выбирает \(m\) из них для главного блюда дня. Помощник главного повара тестирует блюдо и после этого оно поступает на обед в ресторан.
Известно, что у помощника есть аллергия на \(k\) видов специй, имеющихся в ресторане. Сегодня он протестировал блюдо и аллергии не возникло.
На обед пришло \(p\) человек, у каждого из которых тоже есть аллергия на некоторые виды специй. Попробуйте для каждого из участников обеда предположить, может ли у них возникнуть аллергия на главное блюдо?
В первой содержатся целые числа \(n\) и \(m\) (\(1 \le m \le n \le 100\)) — число специй на складе и количество специй в главном блюде соответственно.
Далее в отдельной строке идет число \(k\) (\(0 \le k \le n\)) — число специй, на которые аллергия у помощника повара.
В следующих \(k\) строках содержатся названия специй, на которые есть аллергия у помощника повара.
В следующей строке написано число \(p\) (\(1 \le p \le 100\)) — число людей на обеде. Далее идет \(p\) блоков, описывающих специи, опасные для \(i\)-го участника обеда. Каждый блок начинается строкой с числом \(n_i\) (\(0 \le n_i \le n\)) — количеством продуктов, на которые аллергия у \(i\)-го человека, вслед за которым идёт \(n_i\) строк с названиями аллергенных специй.
Все названия — слова из латинских букв длиной не более 30 символов.
Для каждого из \(p\) запросов выведите на отдельной строке одно слово:
-
NO, если обед будет полностью безвреден для очередного гостя;
-
YES, если в главном блюде есть специя аллергенная для гостя;
-
MAYBE, если при таких исходных данных возможна и та, и другая ситуация.
| |
|
|
Безлюдный отель
Строки
реализация
Задача на реализацию
Закончился туристический сезон, и почти все отдыхающие разъехались. Теперь у Портье почти не осталось работы, и он уже успел заскучать. Поначалу он пытался скоротать время, снова и снова убирая номера, решая судоку и раскладывая пасьянсы. Но все это ему быстро надоело.
Однажды он заметил, что один из гостей оставил на столе книгу. Портье придумал следующую игру: он открывает книгу на случайной странице, выбирает какое-то слово и выписывает его большими буквами на отдельном листе бумаги.
После этого он берёт монетку и кладёт её на первую букву слова. Затем много раз (возможно, бесконечное число) он делает следующую операцию: если выбранном слове есть еще одна такая же буква, как и та, на которой лежит монетка, то портье перекладывает эту монетку на любую такую же букву. Если же буква, на которой лежит монетка встречается ровно один раз, то портье сдвигает монетку на следующую букву, а если следующей буквы в слове нет, то игра завершается.
Например, если изначальное слово было <<letovo>>, то монетка будет перемещаться следующим образом (положение монетки в отражено жирным подчёркнутым шрифтом):
-
letovo
-
letovo
-
letovo
-
letovo
-
letovo
-
letovo
-
letovo
-
\(\dots\)
Обратите внимание, что в примере выше игра никогда не завершится: монетка будет бесконечно долго перемещаться между двумя буквами <<o>>.
Помогите Портье: по данному вам слову длины \(n\), состоящему только из строчных букв латинского алфавита, узнать завершается ли на этом слове придуманная им игра.
В первой строке дано число \(n\) (\(1 \le n \le 100\,000\)) — длина строки.
Во второй строке дана строка \(s\), строка состоит только из строчных букв латинского алфавита.
Выведите <<YES>>, если игра завершается, и <<NO>> — в противоположном случае.
| |
|
|
Кошачий ужин
Задача на реализацию
В отеле есть традиция устраивать публичное вечернее кормление всех живущих в отеле кошек. Всего в нём живёт \(n\) кошек, и имеется по одной личной миске для каждой из кошек и одна большая общая миска, из которой может наесться любое количество питомцев. Личные миски кошек расположены в один ряд, а общая стоит отдельно от всех остальных.
Ваши питомцы хорошо обучены есть строго либо из своей миски, либо из большой общей миски. Когда \(i\)-й котик ест из своей миски, то он выглядит милым на некоторую величину \(a_i\). Если бы все котики спокойно кушали из своей миски, то общая милота ужина вычислялась бы как сумма \(a_i\) всех котиков.
Но не все так просто, некоторые питомцы слишком увлекаются едой и начинают толкать своего соседа справа во время трапезы, тем самым мешая другим кушать и портя общую милоту ужина. Допустим, вы знаете, что \(i\)-й котик толкается, тогда вы можете избежать толкания, если посадить либо \(i\)-го котика, либо \(i+1\)-го котика ужинать за общую миску, но в таком случае отсаженный котик уже не будет привносить милоту в общую милоту ужина. Вам известно, что толкание \(i\)-го котика своего соседа справа отнимает \(q_i\) общей милоты ужина. Таким образом, общая милота ужина вычисляется как сумма милоты всех котиков, которые ужинают за своей миской, из которой вычитаются все \(q_i\) котиков, которые толкают своего соседа на позиции \(i+1\).
Сегодня в отель заселились очень важные гости, и вы хотите посадить котиков ужинать так, чтобы общая милота ужина была максимальной.
Формат входных данных
Первая строка содержит одно целое число \(n\) \((1 \le n \le 10^6)\) — количество котиков.
Вторая строка содержит \(n\) целых чисел \((1 \le a_i \le 10^6)\), где \(a_i\) — милота \(i\)-го котика.
Третья строка содержит одно число \(m\) \((0 \le m < n)\) — количество котиков, толкающих своего соседа.
Каждая из последующих \(m\) строк содержит два числа \(k_i\) \((1 \le k_i < n)\) и \(q_{k_i}\) \((1 \le q_{k_i} \le 10^6)\), обозначающую, что если \(k_i\) котик толкается, то общая милота ужина уменьшается на \(q_{k_i}\).
Формат выходных данных
В качестве ответа выведите одно число — максимально возможную милоту ужина.
В первом примере можно отсадить первого питомца к общей миске, а остальных отправить ужинать за свои миски. Суммарная милота благодаря тому, что котики кушают за своими мисками, будет равна \(20 + 30 + 40 + 50 = 140\), но третий котик будет толкать четвертого, поэтому из этой суммы вычитается \(q_3 = 25\). Таким образом, ответ на этот пример равен \(115\).
| |
|
|
A8.1 crosstab ячейки
Задача на реализацию
pd.crosstab(df['Region'], df['income_level']) — что в ячейках полученной таблицы?
- средние значения
- суммы населения
- количество строк (стран) для каждой пары (Регион, Доход)
- проценты от общего
| |
|
|
Разговор с сервером
Задача на реализацию
Ты открыл DevTools в браузере (F12) и увидел, как твой браузер общается с сервером. Первая строка запроса выглядит так:
GET /about HTTP/1.1
Это называется стартовая строка.
Какая из частей является путём (тем самым, что мы пишем в @app.route(...))?
- GET
- /about
- HTTP/1.1
- GET /about
| |
|
|
Найди баг
Задача на реализацию
Аня открывает http://127.0.0.1:5050/hello и видит 404 Not Found. Её код:
from flask import Flask # 1
app = Flask(__name__) # 2
@app.route('Hello') # 3
def hello(): # 4
return 'Привет, мир!' # 5
app.run(port=5050) # 6
В какой строке ошибка?
| |
|
|
Пиццерия и интернет
Задача на реализацию
Вася позвонил в пиццерию и сказал: «Мне большую пепперони!». Повар приготовил пиццу, и курьер привёз её домой.
Если сравнить это с открытием сайта в браузере, то звонок Васи (момент, когда он сказал, что хочет пиццу) — это:
- Браузер
- HTTP-запрос
- HTTP-ответ
- DNS-сервер
| |
|
|
Форматирование текста: Московский Кремль
Задача на реализацию
Ученик напечатал в текстовом процессоре следующий текст.
Московский Кремль является старейшей частью города и его главным историческим центром. Площадь территории Кремля составляет около 277000 квадратных метров. На территории Кремля расположены соборы, дворцы и здания правительства. Кремль включён в список Всемирного наследия ЮНЕСКО.
Далее он выполнил последовательно следующие действия:
- Поставил курсор справа от точки после слова «метров».
- Нажал клавишу Enter.
- Выделил весь текст.
- В свойствах меню «абзац» выставил значения:
1) отступ первой строки: 1,5 см;
2) выравнивание по ширине.
Далее юноша выполнил действия, используя виртуальные кнопки, находящиеся на панели редактирования шрифтов в программе текстового процессора.
- Выделил словосочетание «Московский Кремль» и нажал на кнопку Ж.
- Выделил словосочетание «квадратных метров» и нажал клавишу backspace на клавиатуре. Напечатал «м2» (без кавычек).
- Выделил цифру 2 в «м2» и нажал на кнопку x² (надстрочный символ).
- Выделил словосочетание «Всемирного наследия ЮНЕСКО» и нажал на кнопку К.
- Выделил весь текст.
- Установил шрифт Times New Roman (с засечками).
Какой из предложенных вариантов текста мог получиться после выполнения этих действий? В ответе укажите номер варианта.
Вариант 1
Московский Кремль является старейшей частью города и его главным историческим центром. Площадь территории Кремля составляет около 277000 м2.
На территории Кремля расположены соборы, дворцы и здания правительства. Кремль включён в список Всемирного наследия ЮНЕСКО.
Вариант 2
Московский Кремль является старейшей частью города и его главным историческим центром. Площадь территории Кремля составляет около 277000 м2.
На территории Кремля расположены соборы, дворцы и здания правительства. Кремль включён в список Всемирного наследия ЮНЕСКО.
Вариант 3
Московский Кремль является старейшей частью города и его главным историческим центром. Площадь территории Кремля составляет около 277000 м2. На территории Кремля расположены соборы, дворцы и здания правительства. Кремль включён в список Всемирного наследия ЮНЕСКО.
Вариант 4
Московский Кремль является старейшей частью города и его главным историческим центром. Площадь территории Кремля составляет около 277000 м2.
На территории Кремля расположены соборы, дворцы и здания правительства. Кремль включён в список Всемирного наследия ЮНЕСКО.
| |
|
|
Форматирование текста: Периодическая таблица
Задача на реализацию
Ученик напечатал в текстовом процессоре следующий текст.
Периодическая таблица химических элементов была создана Д. И. Менделеевым в 1869 году. Она систематизирует элементы по атомному номеру и химическим свойствам. Современная таблица содержит 118 подтверждённых элементов. Последние четыре элемента были официально названы в 2016 году.
Далее он выполнил последовательно следующие действия:
- Поставил курсор справа от точки после слова «свойствам».
- Нажал клавишу Enter.
- Выделил второй абзац (начиная со слов «Современная таблица…»).
- В свойствах меню «абзац» выставил значение:
1) выравнивание по правому краю.
Далее юноша выполнил действия, используя виртуальные кнопки, находящиеся на панели редактирования шрифтов в программе текстового процессора.
- Выделил словосочетание «Д. И. Менделеевым» и нажал на кнопку Ж.
- Выделил словосочетание «подтверждённых элементов» и нажал на кнопку Ч.
- Выделил словосочетание «Периодическая таблица» и нажал на кнопку К.
- Выделил весь текст.
- Установил шрифт Times New Roman (с засечками).
Какой из предложенных вариантов текста мог получиться после выполнения этих действий? В ответе укажите номер варианта.
Вариант 1
Периодическая таблица химических элементов была создана Д. И. Менделеевым в 1869 году. Она систематизирует элементы по атомному номеру и химическим свойствам.
Современная таблица содержит 118 подтверждённых элементов. Последние четыре элемента были официально названы в 2016 году.
Вариант 2
Периодическая таблица химических элементов была создана Д. И. Менделеевым в 1869 году. Она систематизирует элементы по атомному номеру и химическим свойствам.
Современная таблица содержит 118 подтверждённых элементов. Последние четыре элемента были официально названы в 2016 году.
Вариант 3
Периодическая таблица химических элементов была создана Д. И. Менделеевым в 1869 году. Она систематизирует элементы по атомному номеру и химическим свойствам.
Современная таблица содержит 118 подтверждённых элементов. Последние четыре элемента были официально названы в 2016 году.
Вариант 4
Периодическая таблица химических элементов была создана Д. И. Менделеевым в 1869 году. Она систематизирует элементы по атомному номеру и химическим свойствам.
Современная таблица содержит 118 подтверждённых элементов. Последние четыре элемента были официально названы в 2016 году.
| |
|
|
Форматирование текста: Каспийское море
Задача на реализацию
Ученик напечатал в текстовом процессоре следующий текст.
Каспийское море — крупнейший на Земле замкнутый водоём. Площадь его водной поверхности составляет около 371000 квадратных километров. Каспийское море омывает берега пяти государств. Наибольшая глубина составляет 1025 метров.
Далее он выполнил последовательно следующие действия:
- Поставил курсор справа от точки после слова «километров».
- Нажал клавишу Enter.
- Выделил весь текст.
- В свойствах меню «абзац» выставил значения:
1) отступ первой строки: 1 см;
2) выравнивание по ширине.
Далее юноша выполнил действия, используя виртуальные кнопки, находящиеся на панели редактирования шрифтов в программе текстового процессора.
- Выделил словосочетание «Каспийское море» (первое вхождение) и нажал на кнопку Ж.
- Выделил словосочетание «квадратных километров» и нажал клавишу backspace на клавиатуре. Напечатал «км2» (без кавычек).
- Выделил цифру 2 в «км2» и нажал на кнопку x² (надстрочный символ).
- Выделил словосочетание «пяти государств» и нажал на кнопку К.
- Выделил весь текст.
- Установил шрифт Times New Roman (с засечками).
Какой из предложенных вариантов текста мог получиться после выполнения этих действий? В ответе укажите номер варианта.
Вариант 1
Каспийское море — крупнейший на Земле замкнутый водоём. Площадь его водной поверхности составляет около 371000 км2. Каспийское море омывает берега пяти государств. Наибольшая глубина составляет 1025 метров.
Вариант 2
Каспийское море — крупнейший на Земле замкнутый водоём. Площадь его водной поверхности составляет около 371000 км2.
Каспийское море омывает берега пяти государств. Наибольшая глубина составляет 1025 метров.
Вариант 3
Каспийское море — крупнейший на Земле замкнутый водоём. Площадь его водной поверхности составляет около 371000 км2.
Каспийское море омывает берега пяти государств. Наибольшая глубина составляет 1025 метров.
Вариант 4
Каспийское море — крупнейший на Земле замкнутый водоём. Площадь его водной поверхности составляет около 371000 км2.
Каспийское море омывает берега пяти государств. Наибольшая глубина составляет 1025 метров.
| |
|
|
Какое правило сильнее - 2
Задача на реализацию
Из нижеприведенных правил выберите правило с наибольшим приоритетом:
1) a.button:hover
2) nav > ul li
3) #menu .item
4) *
| |
|
|
Какое из утверждений о ограничении уникальности данных (UNIQUE) в SQLite является верным?
Задача на реализацию
Какое из утверждений о ограничении уникальности данных (UNIQUE) в SQLite является верным?
Ответы:
- Ограничение UNIQUE допускает несколько одинаковых значений в столбце.
- Ограничение UNIQUE применяется только к числовым столбцам.
- Ограничение UNIQUE позволяет одному столбцу иметь несколько
NULL значений.
- В таблице можно применить несколько ограничений UNIQUE к разным столбцам.
| |
|
|
Какое утверждение о первичном ключе (PRIMARY KEY) в SQLite является верным?
Задача на реализацию
Вопрос: Какое утверждение о первичном ключе (PRIMARY KEY) в SQLite является верным?
Ответы:
- Первичный ключ может содержать пустые (
NULL) значения.
- В таблице можно создать несколько первичных ключей.
- Первичный ключ автоматически гарантирует уникальность значений в столбце.
- Первичный ключ автоматически сохраняет текстовые данные в формате
TEXT.
| |
|
|
ООП-6
Задача на реализацию
Что называют атрибутами класса?
- Только переменные класса
- Экземпляры (объекты) класса
- Только методы класса
- Переменные и имена методов (ссылки на методы) класса
| |
|
|
ООП-5
Задача на реализацию
Что называется методом класса?
- Любая (не статическая) функция, объявленная внутри класса
- Такого термина в ООП нет
- Переменные и функции внутри класса
- Любая переменная, объявленная внутри класса
| |
|
|
ООП-2
Задача на реализацию
Каким термином из ООП можно охарактеризовать ограничение доступа к элементам класса?
| |
|
|
ООП - 1
Задача на реализацию
Можно ли создавать программы без использования ООП?
| |
|
|
Что такое Интегрированная среда разработки (IDE)?
Задача на реализацию
Что такое Интегрированная среда разработки (IDE)?
1) Программа для создания графических интерфейсов.
2) Система управления базами данных.
3) Средство упрощения разработки и отладки программ.
4) Инструмент для автоматического тестирования кода.
| |
|
|
Какая основная задача компоновщика при создании исполняемого файла?
Задача на реализацию
Какая основная задача компоновщика при создании исполняемого файла?
1) Проверка орфографии и грамматики в объектных файлах.
2) Объединение объектных файлов и разрешение межфайловых зависимостей.
3) Автоматическое создание объектных файлов из исходного кода.
4) Оптимизация размера исполняемого файла для экономии памяти.
| |
|
|
Каким образом компилятор C++ обрабатывает файлы исходного кода при компиляции программы?
Задача на реализацию
Каким образом компилятор C++ обрабатывает файлы исходного кода при компиляции программы?
1) Последовательно просматривает каждый файл .cpp, проверяя их соответствие правилам C++ и переводя код в инструкции машинного языка.
2) Переносит код на другие уровни компиляции для оптимизации производительности программы.
3) Использует файлы .obj для хранения только ошибок компиляции и их номера строк.
4) Импортирует код из файлов .obj в код других программ для многократного использования.
| |
|
|
38458
Задача на реализацию
Количество конструкторов, которые может определить класс, равно?
A) 1
B) 2
C) Любое число
D) Ни один из упомянутых
| |
|
|
38457
Задача на реализацию
Выберите неверное утвеждение:
1) Возможно инициализировать нестатические поля данных в статическом конструкторе.
2) Можно инициализировать статические поля данных в нестатическом конструкторе, но после этого они теряют свой статический характер.
3) Можно инициализировать статические поля данных как в статических, так и в нестатических конструкторах, но статические поля данных теряют свой статический характер.
4) Возможно инициализировать нестатические поля данных в нестатическом конструкторе.
| |
|
|
31823
Задача на реализацию
Выберите тип устройства Микрофон
1) Память
2) Ввод
3) Вывод
4) Не знаю
| |
|
|
31822
Задача на реализацию
Выберите тип устройства Принтер
1) Память
2) Ввод
3) Вывод
4) Не знаю
| |
|
|
31820
Задача на реализацию
Выберите тип устройства Монитор
1) Память
2) Ввод
3) Вывод
4) Не знаю
| |
|
|
24646
Задача на реализацию
Готовый вариант оформления презентации называется
1. заготовкой
2. дизайном
3. монтажом
4. шаблоном
| |
|
|
24645
Задача на реализацию
Как называется процесс создания презентации?
1. монтаж
2. верстка
3. презентация
4. обработка
| |
|
|
23357
Задача на реализацию
Блок обработки данных в блок-схеме изображается с помощью ...
1. овала
2. параллелограмма
3. ромба
4. прямоугольника
| |
|
|
23339
Задача на реализацию
Исполнитель Робот является ...
1. формальным исполнителем
2. традиционным исполнителем
3. неформальным исполнителем
4. одноформальным исполнителем
| |
|
|
21933
Задача на реализацию
Группа смежных ячеек называется
1. столбцы
2. строки
3. ячейка
4. диапазон ячеек
| |
|
|
21932
Задача на реализацию
Элементарный элемент таблицы называется
1. столбцы
2. строки
3. ячейка
4. диапазон ячеек
| |
|
|
21920
Задача на реализацию
В табличном процессоре связи между числами организованы с помощью
1. формул
2. ссылок
3. адресации
4. гиперссылок
| |
|
|
21919
Задача на реализацию
Комплекс программ, предназначенный для автоматизации вычислений и анализа данных, представленных в табличной форме называется...
1. электронной таблицей
2. табличным редактором
3. электронным редактором таблиц
4. табличным процессором
| |
|
|
21917
Задача на реализацию
Каково основное назначение табличного процессора?
1. представление числовой информации в табличной форме
2. создание таблиц и диаграмм
3. автоматизация расчетов в таблицах
4. создание таблиц
| |
|
|
21809
Задача на реализацию
Можно ли в текстовом процессоре работать с изображениями?
1. нет
2. да
3. не во всех
| |
|
|
21808
Задача на реализацию
Можно ли в текстовом процессоре создавать таблицы?
1. нет
2. да
3. не во всех
| |
|
|
21805
Задача на реализацию
Если мы хотим переместить выбранное слово, то необходимо использовать операцию:
1. вырезать
2. копировать
3. размножить
4. удалить
| |
|
|
21799
Задача на реализацию
Разбиение текста на несколько колонок называется
1. проверкой правописания
2. форматированием
3. редактированием
4. стилизацией
| |
|
|
21798
Задача на реализацию
Изменение структуры текста называется
1. проверкой правописания
2. форматированием
3. редактированием
4. стилизацией
| |
|
|
21797
Задача на реализацию
Изменение нескольких букв или слов в тексте называется
1. проверкой правописания
2. форматированием
3. редактированием
4. стилизацией
| |
|
|
21795
Задача на реализацию
Какое программное обеспечение обладает большим функционалом?
1. текстовый процессор
2. текстовый редактор
3. блокнот
4. у всех одинаковый функционал
| |
|
|
21794
Задача на реализацию
Программа, предназначенная для создания, просмотра, редактирования, форматирования, сохранения и печати текстовых документов, которая может содержать объекты
различной природы - это
1. текстовый редактор
2. текстовая программа
3. текстовый процессор
4. текстовый обработчик
| |
|
|
21793
Задача на реализацию
К функциям текстового редактора относятся:
1. создание, редактирование и печать документа
2. создание и редактирование документа
3. все операции по набору и редактированию текстовой информации
4. набор текста и его вывод на печать
| |
|
|
21761
Задача на реализацию
Можно ли открыть файл собственного формата в бесплатной программе?
1. да
2. нет
3. не всегда
4. в случае, если программа поддерживает этот формат
| |
|
|
21760
Задача на реализацию
Можно ли открыть файл универсального формата в платной программе?
1. да
2. нет
3. не всегда
4. в случае, если в списке программы есть этот формат
| |
|
|
21705
Задача на реализацию
Что из перечисленного является устройством ввода графической информации?
1. клавиатура
2. монитор
3. сканер
4. принтер
| |
|
|
21579
Задача на реализацию
Управляемый объект называется
1. подчиненным
2. объектом кибернетики
3. киборгом
4. исполнителем
| |
|
|
21519
Задача на реализацию
Какое из расширений в списке используется для файлов архиватора:
1. doc;
2. jpeg;
3. zip;
4. txt;
| |
|
|
1685
Задача на реализацию
Укажите тип файла "s.exe"
1) текстовый;
2) графический;
3) исполняемый;
4) видео.
| |
|
|
1649
Задача на реализацию
Центральный процессор - "мозг" компьютера - входит в состав:
1) монитора
2) клавиатуры
3) системного блока
4) нет правильного ответа
| |
|
|
1648
Задача на реализацию
Что такое микропроцессор?
1) Интегральная микросхема, которая выполняет поступающие на ее вход команды (например, вычисление) и управляет работой машины
2) устройство для хранения той информации, которая часто используется в работе
3) устройство для вывода текстовой или графической информации
4) устройство для ввода алфавитно-цифровых данных
| |
|
|
1619
Задача на реализацию
Всегда ли проверка правописания дает корректный результат?
1) Да, всегда.
2) Нет, она выдает только подозрения на ошибки.
3) Нет результат всегда неправильный.
4) Да, результат всегда корректный
| |
|
|
1612
Задача на реализацию
Что может содержать в себе таблица?
1) Устройства
2) Только файлы
3) Текст и рисунки
4) Ни файлы ни папки
| |
|
|
1610
Задача на реализацию
Как вставить таблицу?
1)Таблица - Вставить - Таблица
2) Вставка - Таблица
3) Сервис - Вставить - Таблица
| |
|
|
1609
Задача на реализацию
Дан текст: "Идет бычок качается". К тексту (в порядке следования слов) применены команды: выделить слово, вырезать, выделить слово, копировать, выделить слово, вырезать, вставить, вставить. Что будет отображаться на экране после выполнения этих команд?:
1) бычок качается
2) бычок бычок качается
3) бычок бычок качается качается
4) бычок качается качается
| |
|
|
1608
Задача на реализацию
Указать команду(ы), при выполнении которой(ых) выделенный фрагмент текста попадает в буфер обмена:
1) вставить
2) заменить
3) проверить орфографию
4) вырезать и копировать
| |
|
|
1605
Задача на реализацию
Меню текстового редактора - это:
1. информация о текущем состоянии текстового редактора
2. своеобразное "окно", через которое тест просматривается на экране
3. часть его интерфейса, обеспечивающая переход к выполнению различных операций над текстом
4. подпрограмма, обеспечивающая управление ресурсами ПК при создании документа
| |
|
|
1604
Задача на реализацию
В текстовом редакторе при задании параметров страницы устанавливаются:
1. Стиль, шаблон
2. Гарнитура, размер, начертание
3. Поля, ориентация
4. Отступ, интервал
| |
|
|
1603
Задача на реализацию
Процедура автоматического форматирования текста предусматривает:
1. отмену предыдущей операции, совершенной над текстом
2. удаление текста
3. запись текста в буфер
4. автоматическое расположение текста в соответствии с определенными правилами.
| |
|
|
1601
Задача на реализацию
Редактирование текста представляет собой:
1. процесс внесения изменений в имеющийся текст
2. процесс передачи текстовой информации по компьютерной сети
3. процедуру сохранения текста на диске в виде текстового файла
4. процедуру считывания с внешнего запоминающего устройства ранее созданного текста
| |
|
|
1598
Задача на реализацию
Текстовый редактор предназначен для:
1) поиска информации в базе данных
2) редактирования текста;
3) рисования на экране дисплея;
4) трансляции программ
| |
|
|
1596
Задача на реализацию
Как изменится текст "Маша мыла раму" после выполнения нижеприведенного алгоритма?
Алгоритм:
1) Подогнать курсор к началу слова "Маша"
2) Начать выделение
3) Подогнать курсор к концу слова "Маша"
4) Закончить выделение
5) Выбрать курсивное начертание
Варианты ответов:
1) Маша мыла раму
2) Маша мыла раму
3) Маша мыла раму
4) Маша мыла раму
| |
|
|
1594
Задача на реализацию
В текстовом редакторе выполнение операции "копирование" становится возможным после ...
1) установки курсора в определенное положение
2) сохранения файла
3) распечатки файла
4) выделения фрагмента текста
| |
|
|
1591
Задача на реализацию
В процессе редактирования текста, изменяется
1) размер шрифта
2) параметры абзаца
3) последовательность символов, слов, абзацев
4) параметры страницы
| |
|
|
1588
Задача на реализацию
Текстовый редактор - это
1) программа, предназначенная для работы с текстовой информацией в процессе делопроизводства, редакционно-издательской деятельности и пр.
2) программа управления ресурсами персонального компьютера при создании документов;
3) программа автоматического перевода текста на символических языках в текст, записанный с использованием машинных кодов;
4) работник издательства, осуществляющий проверку и исправление ошибок в тексте при подготовке рукописи к печати
| |
|
|
1298
Задача на реализацию
Пользователь работал с каталогом C:\Физика\Задачи\Кинематика . Сначала он поднялся на один уровень вверх, затем еще раз поднялся на один уровень вверх и после этого спустился в каталог Экзамен . Запишите полный путь каталога, в котором оказался пользователь.
1)С:\Физика
2)С:\Экзамен
3) С:\Физика\Экзамен
4) С:\Физика\Задачи\Экзамен
| |
|
|
1242
Задача на реализацию
Команды форматирования в электронной таблице выполняют функции:
1) перемещения, вставки, удаления, копирования, замены
2) сохранения файлов, загрузки файлов
3) выравнивания данных в ячейках, назначения шрифтов, толщины, линий
4) поиска и замены
| |
|
|
1235
Задача на реализацию
При перемещении или копировании в электронной таблице относительные ссылки:
- преобразуются вне зависимости от нового положения формулы;
- преобразуются в зависимости от длины формулы;
- не изменяются;
- преобразуются в зависимости от нового положения формулы.
| |
|
|
1233
Задача на реализацию
Выберите верную запись формулы для электронной таблицы:
1. C3+4*D4
2. C3=C1+2*C2
3. A5B5+23
4. =A2*A3-A4
| |
|
|
1231
Задача на реализацию
Использование маркера заполнения позволяет копировать в ячейки:
1)функции
2)форматы
3)данные
4)ответы 1-3 верны
| |
|
|
1222
Задача на реализацию
Запись #ЗНАЧ! в ячейке говорит о том, что:
1) непонятна формула;
2) столбец недостаточно широк;
3) неверна ссылка;
4) ссылка циклическая.
| |
|
|
1221
Задача на реализацию
Основным элементом рабочего листа в электронных таблицах является:
1) ячейка;
2) столбец;
3) строка;
4) строка формул.
| |
|
|
1215
Задача на реализацию
Вычислительные формулы в ячейках электронной таблицы записываются
1) в обычной математической записи
2) специальным образом с использование встроенных функций и по правилам, принятым для записи выражений в языках программирования
3) по правилам, принятым исключительно для электронный таблиц
4) по правилам, принятым исключительно для баз данных
| |
|
|
1213
Задача на реализацию
Активная ячейка - это ячейка:
1) для записи команд
2) содержащая формулу, включающую в себя имя ячейки, в которой выполняется ввод данных
3) формула в которой содержатся ссылки на содержимое зависимой ячейки
4) в которой выполняется ввод команд.
| |
|
|
1210
Задача на реализацию
Формула в электронных таблицах не может включать:
1) текст
2) числа
3) знаки арифметических операций
4) файлы.
| |
|
|
1206
Задача на реализацию
Электронная таблица - это
1) прикладная программа, предназначенная для обработки структурированных в виде таблицы данных
2) прикладная программа для обработки кодовых таблиц
3) устройство ПК, управляющее его ресурсами в процессе обработки данных в табличной форме
4) системная программа, управляющая ресурсами ПК при обработке таблиц
| |
|
|
868
Задача на реализацию
Задание ритма при передаче информационных сигналов в компьютере осуществляет:
1) тактовая частота
2) ОЗУ
3) тактовый генератор
4) ПЗУ
| |
|
|
604
Задача на реализацию
Что НЕ относится к режиму работы процессора?
1) запись-чтение данных из оперативной памяти
2) внесение изменений в программное обеспечение
3) пересылка данных на устройство вывода информации
4) обработка вводимых данных
| |
|
|
594
Задача на реализацию
Драйвер - это
1) устройство длительного хранения информации
2) программа, связывающая процессор с конкретным типом внешнего устройства
3) устройство, позволяющее подсоеденить к компьютеру новое внешнее устройство
4) программа, позволяющая операционной системе работать с новым внешним устройством
| |
|
|
137
Задача на реализацию
Существует способ выбрать все экземпляры стиля в своем документе, нажав одну кнопку.
Варианты:
1. Неверно.
2. Верно.
| |
|
|
135
Задача на реализацию
В чем преимущества использования стилей для форматирования документа?
Варианты:
1. Стиль предоставляет доступ к диалоговому окну «Шрифт», в котором можно настроить различные параметры дизайна.
2. Назначение стиля – одновременное применение нескольких типов форматирования.
| |
|
|
Шифр mint
Задача на реализацию
Многие старейшие шифры основаны на замене букв на числа, например, в шифре A1Z26 каждая буква заменяется на её порядковый номер в алфавите. Вдохновившись этой идеей, первоклассник Петя решил придумать свой шифр-замену. Он хочет каждую букву от <<A>> до <<R>> (первые \(18\) букв латинского алфавита) заменять на одно из чисел \(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90\). Числа выбраны так, чтобы при дешифровке легко разделить последовательность цифр на коды букв, причём весь алфавит Петя не смог использовать, ибо сотни он ещё не узнал.
Если применить один из таких шифров к строке, он получит натуральное число. Если использовать разные шифры, удовлетворяющие условию, то будут получаться разные числа.
Пете интересно, какое наименьшее число может быть шифром заданной строки. К сожалению, сравнивать длинные числа слишком сложная задача для первоклассника, поэтому он просит вас написать программу, шифрующую заданное слово минимальным числом.
Программа получает на вход непустую строку \(s\), состоящую из прописных букв латинского алфавита от <<A>> до <<R>>, длина строки не превышает 1000 символов.
Программа должна вывести одно число — шифр строки \(s\). Обратите внимание, число может быть длинным.
Решения, правильно работающие, когда строка состоит не более чем из \(4\) символов, будут оцениваться в \(20\) баллов.
Решения, правильно работающие, когда строка состоит из букв <<A>> и <<B>>, будут оцениваться в \(20\) баллов.
Решения, правильно работающие, когда строка состоит из букв от <<A>> до <<I>>, будут оцениваться в \(44\) балла.
| |
|
|
Эпизод 12. Транзакция-маркер
Задача на реализацию
СЕКРЕТНО
Дело VOIDLINKER · Эпизод 12 из 13
Транзакция-маркер
ИСТОЧНИК: лог финансовой системы CYBERONE-FIN
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Когда я отмываю украденные средства, ID транзакций подчиняется правилу: все цифры в десятичной записи различны — никаких повторов. Найди мой самый крупный ID — это самая большая отмытая сумма. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА
Определите максимальное число, в десятичной записи которого все цифры различны. Под числом понимается максимальная последовательность цифр, ограниченная нецифровыми символами или границами строки. Числа с ведущими нулями (кроме 0) не рассматриваются. Если подходящих нет — выведите 0.
ВХОДНЫЕ ДАННЫЕ
Одна строка из заглавных букв и цифр, до 105 символов.
ВЫХОДНЫЕ ДАННЫЕ
Само найденное число.
| |
|
|
API: сводка погоды на сутки
Задача на реализацию
Вам на вход подаётся JSON-ответ от API погоды с разделами current (текущая температура) и hourly (почасовой прогноз на 24 часа).
Составьте сводку погоды за сутки.
Формат входных данных
Одна строка — JSON-объект с разделами current и hourly.
Формат выходных данных
Ровно 6 строк:
=== ПОГОДА НА СУТКИ ===
Сейчас: T°C
Максимум: X°C
Минимум: Y°C
Средняя: A°C
Размах: R°C
где T — текущая температура из current, X/Y/A — максимум, минимум и среднее по массиву hourly (среднее округлить до 1 знака), R — разница между максимумом и минимумом.
| |
|
|
API: фильтрация тёплых часов
Задача на реализацию
Вам на вход подаётся JSON-ответ от API погоды с почасовым прогнозом и пороговое значение температуры.
Выведите все часы, когда температура больше или равна порогу. Каждый час — на отдельной строке.
В разделе hourly время хранится как "2026-04-16T15:00". Возьмите только часть после T (получится 15:00).
Если таких часов нет, выведите Нет данных.
Формат входных данных
Первая строка — JSON-объект с разделом hourly.
Вторая строка — целое число (порог).
Формат выходных данных
По одной строке на каждый подходящий час:
HH:00 — X°C
Или Нет данных, если ни один час не подошёл.
| |
|
|
API: средняя температура
Задача на реализацию
Вам на вход подаётся JSON-ответ от API погоды с почасовым прогнозом (раздел hourly, массив temperature_2m из 24 значений).
Посчитайте среднюю температуру за сутки, округлите до одного знака после запятой.
Формат входных данных
Одна строка — JSON-объект с разделом hourly.
Формат выходных данных
Одна строка:
Средняя: X°C
где X — число с одним знаком после запятой.
| |
|
|
API: максимум и минимум за сутки
Задача на реализацию
Вам на вход подаётся JSON-ответ от API погоды с почасовым прогнозом (раздел hourly, массив temperature_2m из 24 значений).
Найдите максимальную и минимальную температуру за сутки.
Формат входных данных
Одна строка — JSON-объект с разделом hourly.
Формат выходных данных
Две строки:
Максимум: X°C
Минимум: Y°C
| |
|
|
API: температура в заданный час
Задача на реализацию
Вам на вход подаётся JSON-ответ от API погоды с почасовым прогнозом (раздел hourly) и номер часа.
Раздел hourly содержит два параллельных массива по 24 элемента: time (время в формате "2026-04-16T15:00") и temperature_2m (температура).
Выведите строку:
Температура в HH:00: X°C
где HH:00 — время, X — целое число температуры.
Формат входных данных
Первая строка — JSON-объект с разделом hourly.
Вторая строка — целое число от 0 до 23 (номер часа).
Формат выходных данных
Одна строка в указанном формате.
| |
|
|
API: собери строку о погоде
Задача на реализацию
Вам на вход подаётся JSON-ответ от API погоды (раздел current) и название города.
Выведите строку в формате:
Город: T°C, ветер W м/с, влажность H%
где T, W, H — значения из JSON (как записаны, без округления).
Формат входных данных
Первая строка — JSON-объект с разделом current.
Вторая строка — название города.
Формат выходных данных
Одна строка в указанном формате.
| |
|
|
API: достань температуру
Задача на реализацию
Вам на вход подаётся JSON-ответ от API погоды — это словарь с разделом current, внутри которого хранятся текущие метеоданные.
Выведите значение температуры (поле temperature_2m).
Формат входных данных
Одна строка — JSON-объект.
Формат выходных данных
Одно число — температура (как оно записано в JSON, без дополнительного форматирования).
Примечание
В реальной программе эти данные вы бы получили через requests.get(...).json(), а здесь они подаются на вход. Парсить JSON можно так:
import json
data = json.loads(input())
| |
|
|
Разложение на множители и вычисление
Задача на реализацию
Дано алгебраическое выражение — полином степени не выше 3 — и целое число \(x_0\). Выполните два действия с помощью SymPy:
-
Разложите на множители — приведите полином к произведению неприводимых множителей.
-
Вычислите значение выражения при \(x=x_0\).
Формат ввода
Строка 1: выражение в синтаксисе Python (** — возведение в степень, * — умножение, переменная x). Строка 2: целое число \(x_0\) (\(-100\le x_0\le 100\)).
Формат вывода
Ровно 2 строки:
factored: <выражение>
value: <число>
Пример ввода:
x**2 - 4
3
Пример вывода:
factored: (x - 2)*(x + 2)
value: 5
Разбор. \(x^2-4=(x-2)(x+2)\) (разность квадратов). Значение при \(x=3\): \(3^2-4=9-4=5\).
Подсказки. Для разбора строки: parse_expr(s, ...). Разложение на множители: factor(expr). Подстановка: expr.subs(x, x0).
| |
|
|
Раскрытие скобок и вычисление
Задача на реализацию
Дано алгебраическое выражение со скобками (полином степени не выше 3) и целое число \(x_0\). Выполните два действия с помощью SymPy:
-
Раскройте скобки — приведите выражение к стандартному виду полинома (без скобок, слагаемые по убыванию степени).
-
Вычислите значение выражения при \(x=x_0\).
Формат ввода
Строка 1: выражение в синтаксисе Python (** — возведение в степень, * — умножение, переменная x). Строка 2: целое число \(x_0\) (\(-100\le x_0\le 100\)).
Формат вывода
Ровно 2 строки:
expanded: <выражение>
value: <число>
Пример ввода:
(x + 3)**2
2
Пример вывода:
expanded: x**2 + 6*x + 9
value: 25
Разбор. \((x+3)^2 = x^2+6x+9\). Значение при \(x=2\): \(4+12+9=25\).
Подсказки. Для разбора строки: parse_expr(s, ...). Раскрытие скобок: expand(expr). Подстановка: expr.subs(x, x0).
| |
|
|
Анализ последовательности ДНК
Задача на реализацию
Дана строка ДНК, состоящая из символов A, T, G, C. Длина строки кратна 3. Выполните следующие вычисления:
-
Длина последовательности.
-
GC-состав — процентная доля нуклеотидов G и C: \[\mathrm{GC\%} = \frac{|G|+|C|}{n}\times 100,\] где \(|X|\) — количество символов \(X\), \(n\) — длина строки. Округлить до 2 знаков после запятой.
-
Обратная комплементарная цепь (reverse complement). Комплементарность: \(\texttt{A}\leftrightarrow\texttt{T}\), \(\texttt{G}\leftrightarrow\texttt{C}\); затем цепь разворачивается.
-
GC-богатые кодоны — количество кодонов (трёхбуквенных блоков), в которых два или три нуклеотида являются G или C.
-
Наиболее частый нуклеотид. При ничьей вывести тот, который идёт первым в алфавитном порядке (\(\texttt{A}<\texttt{C}<\texttt{G}<\texttt{T}\)).
Формат ввода
Одна строка — последовательность ДНК (только заглавные A, T, G, C; \(6\le n\le 300\); \(n\) кратно 3).
Формат вывода
Ровно 5 строк в следующем порядке:
length: <целое>
gc: <вещественное, 2 знака>
rc: <строка>
gc_rich_codons: <целое>
most_frequent: <символ>
Пример ввода:
ATGGGCCCTATGAAA
Пример вывода:
length: 15
gc: 46.67
rc: TTTCATAGGGCCCAT
gc_rich_codons: 2
most_frequent: A
Разбор примера. Последовательность: ATG | GGC | CCT | ATG | AAA. GC-состав: \((4+3)/15=7/15\approx46{,}67\%\). Кодоны GGC (3 G/C) и CCT (2 G/C) — итого 2 GC-богатых кодона. Частоты: \(A=5,\;G=4,\;C=3,\;T=3\) \(\Rightarrow\) лидирует A.
| |
|
|
Полный анализ ДНК-фрагмента
Библиотеки Python
Задача на реализацию
Строки
Дана строка ДНК, состоящая из символов A, T, G, C. Длина строки кратна 3. Выполните следующие вычисления:
-
Длина последовательности.
-
GC-состав — процентная доля нуклеотидов \(G\) и \(C\): \[\mathrm{GC\%} = \frac{|G| + |C|}{n} \times 100,\] где \(|X|\) — количество символов \(X\), \(n\) — длина строки. Округлить до 2 знаков после запятой.
-
Обратная комплементарная цепь (reverse complement). Комплементарность: \(A \leftrightarrow T\), \(G \leftrightarrow C\); затем цепь разворачивается.
-
GC-богатые кодоны — количество кодонов (трёхбуквенных блоков), в которых два или три нуклеотида являются \(G\) или \(C\).
-
Наиболее частый нуклеотид. При ничьей вывести тот, который идёт первым в алфавитном порядке (A < C < G < T).
Формат ввода. Одна строка — последовательность ДНК (только заглавные A, T, G, C; \(6 \le n \le 300\); \(n\) кратно 3).
Формат вывода. Ровно 5 строк в следующем порядке:
length: <целое>
gc: <вещественное, 2 знака>
rc: <строка>
gc_rich_codons: <целое>
most_frequent: <символ>
Пример ввода:
Пример вывода:
length: 15
gc: 46.67
rc: TTTCATAGGGCCCAT
gc_rich_codons: 2
most_frequent: A
Разбор примера. Последовательность: ATG GGC CCT ATG AAA.
GC-состав: \((3+3+2+1)/15 = 9/15 \approx 46.67\%\). Кодоны GGC (\(3\,G/C\)) и CCT (\(2\,G/C\)) — итого 2 GC-богатых кодона. Наиболее частый нуклеотид: \(A=5, G=4, C=3, T=3\) — лидирует \(A\).
| |
|
|
Lights Out
геометрия
Разбор случаев
Задача на реализацию
Фермер Джон установил новую доильную машину.
Она берёт так много энергии, что в амбаре часто выключается свет.
Это случается так часто, что Беси запомнила карту амбара.
Это позволяет ей быстрее находить путь к выходу в темноте.
Теперь ей интересно узнать насколько дольше её путь в темноте.
Амбар описывается простым (несамопересекающимся) многоугольником
с целочисленными вершинами \((x_1, y_1) \ldots (x_n, y_n)\) перечисленными
в порядке обхода по часовой стрелке. Его рёбра составляются чередующимися
горизонтальными (параллельными оси Х) и вертикальными (параллельными оси Y)
отрезками. Первое ребро может быть как горизонтальным, так и вертикальным.
Выход расположен в точке \((x_1, y_1)\). Беси начинает в некоторой вершине
\((x_i, y_i)\) для \(i > 1\). Она идёт только по периметру амбара,
по часовой стрелке или против часовой стрелки, потенциально изменяя направления движения,
в любой вершине. Её цель - пройти минимальное расстояние и добраться до выхода.
Это довольно просто, когда свет включён - просто выбрать между движением по
часовой стрелке и движением против часовой стрелки.
Когда свет выключается, Беси в панике забывает вершину, в которой она
находится. К счастью, она помнит точную карту амбара и поэтому она может
вычислить свою позицию, двигаясь и опираясь на свои ощущения. Когда она
находится в вершине, она может сказать это левый поворот или правый поворот,
и является ли вершина выходом. Когда она идёт по ребру амбара, она может
определить точную длину ребра после того, как пройдёт всё ребро.
В общем сначала Беси двигается, чтобы определить, где она находится, а затем
чтобы добраться к выходу за минимальное из оставшихся расстояний.
Помогите Беси определить минимальное количество, на которое возрастёт её
путь в худшем случае при движении в темноте, по сравнению с движением
при свете, полагая, что она движется оптимально в каждом случае.
Оптимальная стратегия - такая, которая минимизирует увеличение расстояния
в худшем случае.
ФОРМАТ ВВОДА (файл lightsout.in):
Первая строка ввода содержит \(N\) (\(4 \leq N \leq 200\)). Каждая из последующих
\(N\) строк содержит по два целых числа, описывающих точки \((x_i, y_i)\) в почасовом
порядке обхода. Все целые числа \(-100,000 \ldots 100,000\).
ФОРМАТ ВЫВОДА (файл lightsout.out):
Минимально возможное для худшего случая увеличение длины оптимального пути
при походе в темноте по сравнению с походом при свете.
| |
|
|
Marathon
Задача на реализацию
Беси участвует в марафоне. Маршрут марафона состоит из N контрольных точек (3 <= N <= 500), которые надо посетить по порядку, причём контрольная точка 1 - старт, контрольная точка N - финиш. Беси решил пропустить до K (K сократить себе маршрут. Она не может пропустить контрольные точки 1 и N. Определите минимальное расстояние которое пробежит Беси, если она может пропустить до K контрольных точек. Поскольку марафон проводится на улицах Манхэттена, то и расстояние между точками (x1, y1) и (x2, y2) нужно определять манхэттенское: |x1-x2| + |y1-y2|. INPUT: (файл marathon.in) В первой строке задаются N и K. Каждая из следующих N строк содержит два разделённых пробелом целых числа x и y, представляющих контрольную точку (-1000 <= x <= 1000, -1000 <= y <= 1000). Контрольные точки даны в порядке, в котором они должны посещаться. Заметим, что маршрут марафона может самопересекаться несколько раз и некоторые контрольные точки могут быть в одной и той же позиции. Когда Беси пропускает контрольную точку в некоторой позиции, она пропускает только экземпляр контрольной точки, а не все контрольные точки в этой позиции. Формат выходных данных Выведите миниальное расстояние, которое Беси может пробежать, пропустив до K контрольных точек. В данном примере, пропустив точки (8,3) и (10,-5) она пробежит минимальное растояние, равное 4.
| |
|
|
Marathon
Задача на реализацию
Префиксные суммы(минимумы, ...)
Фермер Джон отправил Беси на марафон. Дистанция включает N (3 <= N <= 100,000) контрольных пунктов, которые нужно посетить поочерёдно, от 1 до N. Ленивая Беси решила пропустить один контрольный пункт (не 1 и не N разумеется). Помогите Беси найти минимальное расстояние, которое ей придётся пробежать, если она пропустит один контрольный пункт. Замечание: расстояние между двумя точками (x1,y1) и (x2,y2) надо рассматривать и вычислять как манхэттенское |x1-x2| + |y1-y2|, поскольку во время этого марафона двигаться можно только параллельно осям координат. Формат входных данных Первая строка даёт значение N. Каждая из последующих N строк содержит два разделённых пробелом целых числа X и Y (-1000 <= x <= 1000, -1000 <= y <= 1000), представляющих контрольный пункт. Контрольные пункты задаются в том порядке, в котором их необходимо посещать. Заметим, что маршрут может самопересекаться и несколько контрольных пунктов могут находиться в одной и той же позиции. Когда Беси пропускает контрольную точку, она пропускает её, а не все контрольные точки, расположенные в этой позиции. Формат выходных данных Выведите минимальное расстояние, которое пробежит Беси, пропустив один контрольный пункт. Не забудьте вывести перевод на новую строку. В приведенном примере, пропустив точку(8,3) получим минимальное расстояние 14. Пример вывода 14
| |
|
|
Crosswords
Задача на реализацию
Беси любит разгадывать кроссворды. Однако её сестра Эльза пролила молоко на кроссворд, и теперь Вам предстоит его восстановление (номеров загаданных слов). Вам даётся кроссворд, как решётка N*M (3 <= N <= 50, 3 <= M <= 50). Некоторые из клеток пусты (обычно они белые), а некоторые заблокированы (обычно они чёрные). Теперь процесс присвоения номеров загаданным словам - это простой процесс из двух логических шагов: Шаг 1: Для каждой ячейки мы определяем, начинает ли она горизонтальное загаданное слово, или вертикальное загаданное слово. Чтобы ячейка начинала горизонтальное загаданное слово, нужно, чтобы её левая соседка была заблокированной ячейкой или лежала вне кроссворда и две клетки вправо от неё должны быть пустыми. (То есть горизонтальное загаданное слово всегда содержит 3 или более символов). Правила для ячейки, начинающей вертикальное загаданное слово аналогичны: ячейка сверху должна быть заблокирована или вне кроссворда и две клетки вниз должны быть пустыми. Шаг 2: Мы назначаем номер каждой ячейке, которая начинает слово, последовательно от 1 в том же порядке, в котором мы читаем книгу. В первой строке назначаем числа слева направо, затем во второй строке назначаем числа слева направо и т.д. Числа назначаются только ячейкам, начинающим слова. Например, рассмотрим кроссворд, где пустые ячейки отмечены символами '.'. а блокированные ячейки отмечены символами '#'. ... #.. ... ..# .## Ячейки, которым могут быт присвоены номера горизонтальных или вертикальных загаданных слов помечены символами !. !!! #.. !.. ..# .## Номера должны быть таковы: 123 #.. 4.. ..# .## Заметим, что кроссворд, описанный во входных данных, может не удовлетворять ограничениям в обычно публикуемых кроссвордах. Например, некоторые пустые ячейки могут не быть частью никакого слова. Формат входных данных Первая строка ввода содержит N и M, разделённые одиночным пробелом. Последующие N строк ввода описывают строки решётки. Каждая состоит из M символов, каждый из которых либо '.' (пустая ячейка) либо '#' (блокированная ячейка). Формат выходных данных На первой строке выведите количество загаданных слов. На каждой из оставшихся строк выведите строку и колонку дающую позицию одного слова (в порядке, описанном выше). Верхняя левая ячейка имеет позицию (1,1). Нижняя правая ячейка имеет позицию (N,M).
| |
|
|
Astral Superposition
Задача на реализацию
**Замечание: Время на тест в этой задаче 4 сек, в 2 раза больше, чем по умолчанию.**
Беси использует свой изящный телескоп чтобы сделать фотографии всех звёзд
на ночном небе. Её телескоп может сделать фото \(N \times N\) (\(1 \leq N \leq 1000\))
пикселов, где каждый пиксел это или звезда, или пустое небо. Каждая звезда будет
представлена ровно одним пикселом, и никакие две звезды на разделяют один и тот же пиксел.
Ночью происходит что-то странное со звёздами на небе. Каждая звезда или исчезает
или перемещается на \(A\) пикселов вправо и на \(B\) пикселов вниз (\(0 \leq A,B \leq N\)).
Если звезда исчезает или перемещается за границу фото, она больше не появляется на
втором фото.
Беси делает фотографии до и после перемещений, но после экспериментов, она
случайно наложила одну фотографию на другую. Теперь она видит белые пикселы,
которые были пустыми на обеих фотографиях, серые пикселы, где звезда была ровно
на одном фото и чёрные пикселы, где была звезда на обоих фотографиях. Беси
также помнит, что на второй фотографии не появились новые звёзды, поэтому
первая фотография содержит все звёзды ночного неба. Если не существует исходного
положения звёзд, которое может произвести финальное фото, выведите \(-1\).
ФОРМАТ ВВОДА (с клавиатуры / stdin):
Первая строка ввода содержит \(T\), далее следуют \(T\) подтестов.
Первая строка каждого подтеста содержит \(N\) \(A\) \(B\).
Далее следуют \(N\) строк, каждая из которых представляет одну строку наложенных
фотографий. \(i\)-ая строка представлена строкой \(c_{i,1}c_{i,2}\dots c_{i,N}\),
где каждый \(c_{i,j} \in \{W,G,B\}\), представляющих белый, серый и чёрный цвет
соответственно.
Гарантируется, что сумма \(N^2\) для всех подтестов не превысит \(10^7\).
ФОРМАТ ВЫВОДА (на экран / stdout):
Для каждого подтеста выведите минимальное количество звёзд, которые существовали
до сдвига или \(-1\) если это невозможно определить.
| |
|
|
Cowmpetency
Жадный алгоритм
Задачи на моделирование
Задача на реализацию
Фермер Джон нанимает нового вожака стада для своих коров.
Для этого он интервьюирует \(N\) (\(2 \leq N \leq 10^5\)) коров на эту позицию.
После интервью \(i\)-го кандидата он назначает целое число "уровень компетенции"
\(c_i\) от \(1\) дo \(C\) включительно (\(1 \leq C \leq 10^9\)).
Поскольку ФД интервьюировал много коров, он не помнит все \(c_i\).
Однако он помнит \(Q\) (\(1 \leq Q < N\)) пар чисел \((a_j, h_j)\)
где корова \(h_j\) компетенция которой была строго больше,
чем уровень компетенции коров от \(1\) до \(a_j\) (\(1 \leq a_j < h_j \leq N\)).
ФД говорит Вам последовательность \(c_1, \dots, c_N\) (где \(c_i = 0\)
означает, что он забыл уровень компетенции коровы \(i\), и \(Q\) пар \((a_j, h_j)\).
Помогите ему определить лексикографически минимальную
последовательность уровней компетенции, соответствующую этой информации
или указать, что такой последовательности не существует. Последовательность
чисел называется лексикографически меньше другой последовательности
если в ней меньшее число не первой позиции, где эти последовательности
различаются.
Каждый ввод содержит \(T\) \((1 \leq T \leq 20)\) независимых подтестов.
Гарантируется, что сумма \(N\) по всем подтестам не превысит \(3 \cdot 10^5\).
ФОРМАТ ВВОДА (с клавиатуры / stdin):
Первая строка содержит \(T\), количество независимых подтестов.
Каждый подтест описывается так:
- Первая строка содержит \(N\), \(Q\), \(C\).
- Следующая строка содержит c1, \dots, cN\( \)(0 \leq ci \leq C)$.
- Каждая из последующих \(Q\) строк содержит пару \((a_j, h_j)\).
Гарантируется что все \(a_j\) в текущем подтесте различны.
ОРМАТ ВЫВОДА (на экран / stdout):
Для каждого подтеста выведите одну строку содержащую
лексикографически минимальную последовательность уровней компетенции,
соответствующую информации, которую помнит ФД, или \(-1\), если
такой последовательности не существует.
| |
|
|
Find and Replace
Задача на реализацию
Беси работает в текстовом редакторе miV! Его функция "найти и заменить"
позволяет ей заменить все вхождения маленькой латинской буквы \(c\) на непустую строку
из маленьких латинских букв \(s\). Например, дана строка "\(\texttt{ball}\)".
Если Беси выберет в качестве \(c\) символ 'l' а в качестве строки \(s\) "\(\texttt{na}\)",
данная строка трансформируется в "\(\texttt{banana}\)".
Беси начинает со строки "\(\texttt{a}\)" и трансформирует её используя некоторое
количество операций «найти и заменить» и получает финальную строку \(S\). Поскольку
\(S\) может быть большой, она хочет узнать по заданным \(l\) и \(r\)
\(1\le l\le r\le \min(|S|,10^{18})\), чему равно \(S_{l\dots r}\) - подстрока S с позиции \(l\)
по позицию \(r\) включительно.
Гарантируется, что сумма \(|s|\) по всем операциям не более \(2\cdot 10^5\), и что
\(r-l+1\le 2\cdot 10^5\).
ФОРМАТ ВВОДА (с клавиатуры / stdin):
Первая строка содержит \(l\), \(r\) и количество операций.
Каждая из последующих строк описывает одну операцию и содержит \(c\) и \(s\)
для этой операции. Все символы в интервале от 'a' до 'z'.
ФОРМАТ ВЫВОДА (на экран / stdout):
Выведите строку \(S_{l\dots r}\) на одной строке.
| |
|
|
Stamp Grid
Перебор
Задачи на моделирование
Задача на реализацию
Штамп-живопись это раскрашивание чёрным и белым цветом холста
размером \(N \times N\) ячеек, где определённые ячейки закрашиваются, а другие - нет.
Этот холст может быть представлен массивом символов \(N\times N\) (\(1\le N\le 20\)).
The \(i\)-ый вход \(j\)-ой колонки массива равен символу '*', если холст содержит
чернила в этой ячейке и символ '.' в противном случае.
У Беси есть план рисунка, а Фермер Джон дал ей штамп размером \(K\times K\) (\(1\le K\le N\))
который она может использовать для закраски холста размером \(N \times N\).
Беси может поворачивать штамп на \(90^{\circ}\) по часовой стрелке и применять
его для закраски холста в любом месте, если штамп помещается целиком на холсте.
Формально, Беси выбирает такие целые числа \(i,j\), что \(i \in [1,N-K+1]\) и \(j \in [1, N-K+1]\);
и затем для каждого \((i',j')\) такого, что \(1 \le i', j' \le K\), ячейка холста
\((i+i'-1, j+j'-1)\) закрашивается в чёрный цвет, если в штампе было чернило
в позиции \((i', j')\). Беси может поворачивать свой штамп в любой момент между закрашиваниями.
Если ячейку закрасили она остаётся закрашенной навсегда.
ФД интересно может ли Беси создать свой рисунок, используя его штамп.
Для каждого из \(T\) (\(1 \le T \le 100\)) подтестов помогите ФД получить ответ.
ФОРМАТ ВВОДА (с клавиатуры / stdin):
Первая строка ввода содержит \(T\) - количество подтестов.
Каждый подтест начинается с целого числа \(N\), за которым следуют \(N\) строк,
состоящих их символов '*' и '.', представляющих рисунок, который Беси хочет
нарисовать. Следующая строка содержит число \(K\), за которым следует \(K\) строк,
каждая из которых содержит символы '*' и '.', представляющих штамп ФД.
Последовательные подтесты разделены пустыми строками.
ФОРМАТ ВЫВОДА (на экран / stdout):
Для каждого подтеста выведите "YES" или "NO" на отдельной строке.
| |
|
|
Target Practice
Задача на реализацию
Беси - робокорова, также известная как корборг. Она на числовой прямой старается выстрелить
по \(T\) \((1 \leq T \leq 10^5)\) целям, расположенным в различных позициях.
Беси начинает в позиции \(0\) и и следует строке из \(C\) \((1 \leq C \leq 10^5)\) команд,
каждая из которых одна из букв L, F, или R:
- L: Беси двигается на одну единицу влево.
- R: Беси двигается на одну единицу вправо.
- F: Беси стреляет. Если в текущей позиции Беси находится цель, она разрушается
и её больше нельзя разрушить.
Если Вам разрешено изменить не более одной команды в строке на другую команду, прежде чем
Беси начнёт следовать этой строке команд, какое максимальное количество целей
сможет поразить Беси?
ФОРМАТ ВВОДА (с клавиатуры):
Первая строка содержит \(T\) и \(C\).
Следующая строка содержит позиции этих \(T\) целей, различные целые числа в интервале
\([-C,C]\).
Следующая строка содержит строку команд длины \(C\), одержащую только
символы F, L и R.
ФОРМАТ ВЫВОДА (на экран):
Выведите максимальное количество целей, которые Беси сможет поразить после изменения
одной команды в строке.
| |
|
|
Do You Know Your ABCs_
Задача на реализацию
Коровы фермера Джона ежедневно собираются на "видео-болталки" на платформе "mooZ".
Они придумали простую игру числами:
У Элзи есть три положительных целых числа \(A\), \(B\), \(C\) (\(A\le B\le C\)).
Эти целые числа предполагаются как секретные, поэтому она не говорит их своей сестре Беси.
Вместо этого, она говорит Беси семь необязательно различных целых чисел в интервале
\(1 \ldots 10^9\), подсказывая, что они есть \(A\), \(B\), \(C\), \(A+B\), \(B+C\), \(C+A\), \(A+B+C\)
в некотором порядке.
По заданному списку из этих 7 чисел, помогите Беси определить \(A\), \(B\), \(C\).
Можно доказать, что ответ уникален.
ФОРМАТ ВВОДА (ввод с клавиатуры - stdin):
Единственная строка ввода состоит из семи целых чисел, разделённых одиночными пробелами.
ФОРМАТ ВЫВОДА (на экран - stdout):
Выведите \(A\), \(B\), \(C\) разделённые одиночными пробелами.
| |
|
|
Sleepy Cow Herding
Жадный алгоритм
Отрезки
Задача на реализацию
\(N\) коров Фермера Джона бродят далеко от фермы. Ваша задача - собрать
их в стадо.
Главное поле фермы представлено прямой, на которой каждая корова занимает
некоторое положение в целочисленной координате. Изначально все \(N\) коров
находятся в различных позициях. ФД хочет, чтобы они заняли соседние позиции
(например 3,4,5,6,7,8).
В любой момент времени ФД может давать команду только одной из двух
"крайних" коров (находящейся или в минимальной или в максимальной позиции
среди всех коров). Когда ФД перемещает корову, он говорит ей перейти на любую
незанятую позицию, так чтобы эта корова перестала быть крайней.
Такие перемещения "сближают" коров вплоть до нужного результата.
Определите минимальное и максимальное количество таких перемещений,
чтобы коровы заняли \(N\) последовательных позиций.
ФОРМАТ ВВОДА (файл herding.in):
Первая строка ввода содержит \(N\) (\(3 \leq N \leq 10^5\)). Каждая из следующих
\(N\) строк содержит целое число (в интервале \(1 \ldots 10^9\)) - местоположение
коровы.
ФОРМАТ ВЫВОДА (файл herding.out):
Первая строка вывода должна содержать минимальное количество перемещений,
которое должен сделать ФД, чтобы сгруппировать своих коров.
Вторая строка вывода должна содержать максимальное количество перемещений,
которое должен сделать ФД, чтобы сгруппировать своих коров.
| |
|
|
Team Tic Tac Toe
Задача на реализацию
У Фермера Джона 26 коров, имена которых начинаются с различных букв алфавита
поэтому ФД обычно называет их по первым буквам \(A \ldots Z\).
Недавно эти коровы познакомились с игрой "крестики-нолики", но им не понравилась
игра только с двумя участниками, поэтому они придумали модификацию этой игры
чтобы одновременно множество коров могли играть. Как и в стандартной игре,
игра ведётся на доске \(3 \times 3\) , только вместо X и 0 каждый квадратик
помечается символом \(A \ldots Z\) той коровы, которая сделала ход в данное поле.
Пример доски с такой игрой:
COW
XXO
ABC
Коровы заполнили все 9 квадратиков, теперь они не могут понять, кто же победил
в этой игре. Понятно, как и в обычной игре "крестики-нолики", если одна корова
заняла строку, столбец или диагональ, она выиграла. Однако поскольку игроков может
быть больше двух, они решили позволять коровам формировать команды из двух коров.
Команда объявляется победительницей, если строка, столбец или диагональ состоят
только из символов коров одной команды.
Помогите коровам определить, сколько одиночных коров или команд из двух коров
могут одержать победу. Заметим, что один и тот же квадратик доски может быть
использова в разных вариантах объявления победы.
ФОРМАТ ВВОДА (файл tttt.in):
Ввод состоит из трёх строк, каждая из которых состоит из трёх символов
из диапазона \(A \ldots Z\).
ФОРМАТ ВЫВОДА (файл tttt.out):
Вывод состоит из двух строк. На первой строке выведите количество индивидуальных
коров, которые могут одержать победу. На второй строке выведите количество команд
из двух коров, которые могут одержать победу.
| |
|
|
Moocryption
Задача на реализацию
Коровы увлекаются словесными пазлами.
Например, таким
USOPEN
OOMABO
MOOMXO
PQMROM
Как коровам, им интересно только единственное слово "MOO", которое
может появиться во многих местах горизонтально, вертикально или по диагонали.
Пример сверху содержит 6 таких слов.
Фермер Джон тоже любитель таких пазлов. Поскольку коровы не хотят, чтобы он
разгадывал пазлы раньше коров, они зашифровали пазл, используя заменяющий шифр,
который заменяет каждую букву алфавита некоторой другой, отличающейся буквой.
Например, A может заменяться буквой X, B - буквой A и т.д. Никакая буква не заменяется
собой и никакие две буквы не заменяются одной и той же буквой (иначе расшифровка может стать неоднозначной).
К несчастью, коровы потеряли свою таблицу шифрования и теперь не могут расшифровать
свой пазл. Пожалуйста, помогите им определить максимально возможное количество слов
MOO, которое может существовать для их пазла, при выборе соответствующей таблицы
шифрования
ФОРМАТ ВВОДА (файл moocrypt.in):
Первая строка ввода содержит \(N\) и \(M\),
описывающие количество строк и столбцов в пазле (оба не более 50). Каждая из следующих \(N\) строк содержит по \(M\)
символов, описывающих одну строку зашифрованного пазла. Каждый символ - большая
латинская буква в диапазоне A..Z.
ФОРМАТ ВЫВОДА (файл moocrypt.out):
Выведите максимально возможное количество слов MOO, содержащееся в пазле, если
его расшифровывать с соответствующей таблицей шифрования.
| |
|
|
The Bessie Shuffle (gold)
Задача на реализацию
Беси практикуется в карточных фокусах. Она уже освоила Беси-тасование – тасование M (2 <= M <= 100,000) карт, так чтобы i-ая карта сверху становилась P[i]-ой картой сверху. Теперь она переходит на бОльшие колоды. У неё есть колода из N (M <= N <= 1,000,000,000) карт, последовательно пронумерованных от 1 до N. Она тасует её следующим образом: берёт первые M карт, и выполняет их Беси-тасование, затем снова кладёт их наверх колоды. Далее она удаляет верхнюю карту из колоды и кладёт ее на стол значением вниз. Она повторяет этот процесс, выкладывая забираемые карты поверх друг друга, пока карты не кончатся. Когда у неё в исходной колоде остаётся меньше чем M карт, она прекращает выполнять Беси-тасование, но продолжает брать верхнюю карту и выкладывать её поверх ранее взятых. Беси знает, что изначально колода находится в отсортированном порядке, Причём карта 1 наверху, карта 2 следующая и т.д. По заданному описанию Беси-тасования, вычислите какие карты окажутся на Q (1 <= Q <= N, Q <= 5,000) различных указанных позициях колоды. В 50% тестов N<=100,000. PROBLEM NAME: shufflegold Формат входных данных * Строка 1: Числа N, M и Q разделенные одиночными пробелами * Строки 2..1+M: Строк i+1 указывает позицию сверху колоды, P[i], на которую переместиться i-ая карта после Беси-тасования (1 <= P[i] <= M). * Строки 2+M..1+M+Q: Строка i+1+M содержит одно целое число qi описывающее i-ый запрос. Вы должны вычислить значение на карте, которая окажется в позиции qi сверху (1 <= qi <= N). Формат выходных данных * Строки 1..Q: На i-ой строке, выведите одно целое число, указывающее карту, которая окажется на позиции qi сверху. Примечание Тасование происходило так [1, 2, 3, 4, 5] -> [2, 3, 1, 4, 5] (выкладываем 2 значением вниз) [3, 1, 4, 5] -> [1, 4, 3, 5] (выкладываем 1 значением вниз) [4, 3, 5] -> [3, 5, 4] (выкладываем 3 значением вниз) [5, 4] (выкладываем 5 значением вниз) [4] (выкладываем 4 значением вниз) Финальный расклад [4, 5, 3, 1, 2]
| |
|
|
Проверь математическую тождественность
Задача на реализацию
Даны две строки с выражениями. Проверить, равны ли они при любых значениях переменных.
| |
|
|
Математический калькулятор из строки
Задача на реализацию
Дана строка с выражением.
1. Преобразовать её в символьное выражение
2. Упростить
3. Вывести результат в символьном виде
| |
|
|
Задача 2. Полная реализация DBSCAN
Задача на реализацию
Реализуйте полный алгоритм DBSCAN. Напишите программу
Формат входных данных
n eps minPts : n - число точек (натуральное число не больше 100, eps - положительное вещественное число не больше 3, minPts - натуральное число не больше 5)
n строк: x y (координаты точек, вещественные числа, по модулю меньше 10**5 )
Формат выходных данных
n строк: номер кластера для каждой точки:
- -1 для шума
- нумерация кластеров с 0
| |
|
|
ПИКСЕЛЬНАЯ МОЗАИКА В СТИЛЕ 8-БИТ
Двумерные массивы
Алгоритмы обработки
Задача на реализацию
Создадим эффект старой 8-битной графики! Разделим фото на блоки k×k и каждый блок заменим на один пиксель со средней яркостью. Программа получает на вход размеры фото n и m (оба делятся на k нацело), затем n строк по m чисел - пиксели, затем размер блока k. Программа должна вывести "пикселизированное" изображение: (n/k) строк по (m/k) чисел. Каждое число - это среднее арифметическое блока k×k из исходного изображения, округлённое вниз.
| |
|
|
Список листьев
Задача на реализацию
Выведите информацию о всех листьях дерева: их id и предсказываемый класс.
Формат входных данных
JSON с деревом решений.
Формат выходных данных
Для каждого листа (в порядке возрастания id): <id>пробел<class> Каждый лист на отдельной строке.
| |
|
|
Самый используемый признак
Задача на реализацию
Найдите индекс признака, который чаще всего используется для разбиения во внутренних узлах дерева.
Если несколько признаков используются одинаково часто, выведите минимальный индекс.
Формат входных данных
JSON с деревом решений.
Формат выходных данных
Одно число — индекс самого используемого признака.
| |
|
|
Распределение объектов по листьям
Задача на реализацию
Дано дерево решений и набор объектов. Для каждого листа подсчитайте, сколько объектов в него попадает.
Формат входных данных
Первая строка: JSON с деревом. Вторая строка: N — количество объектов. Следующие N строк: признаки каждого объекта через пробел.
Формат выходных данных
Для каждого листа (в порядке возрастания id): <id_листа>:<количество_объектов> Каждый лист на отдельной строке. Листья с 0 объектов тоже выводить.
| |
|
|
Подсчёт узлов дерева
Задача на реализацию
Дано дерево решений в формате JSON. Подсчитайте количество внутренних узлов (type = "decision") и листьев (type = "leaf").
Формат входных данных
JSON с полем "nodes" — список узлов.
Формат выходных данных
Два числа через пробел: количество внутренних узлов и количество листьев.
| |
|
|
Файловая система
Задача на реализацию
Структура папок и файлов компьютера представлена в формате JSON. Это рекурсивная структура: папка может содержать другие папки.
Найди и выведи имена всех файлов (элементов с `"type": "file"`), в каком бы вложенном уровне они ни находились.
Формат входных данных
JSON-объект, представляющий корневую папку:
- `"name"` — имя элемента
- `"type"` — тип: `"folder"` (папка) или `"file"` (файл)
- `"children"` — массив вложенных элементов (только для папок)
Формат выходных данных
Имена всех файлов, каждое на отдельной строке, в порядке обхода (сначала файлы текущей папки, потом рекурсивно вложенные папки).
| |
|
|
Анализ заказов в кафе
Задача на реализацию
Кафе хранит данные о заказах за день в формате JSON. Каждый заказ содержит список позиций с ценами.
Вычисли общую выручку кафе за день (сумму всех цен всех позиций всех заказов).
Формат входных данных
JSON-объект с полем `"orders"` — массив заказов. Каждый заказ имеет:
- `"order_id"` — номер заказа
- `"items"` — массив позиций, каждая позиция имеет `"name"` и `"price"`
Формат выходных данных
Одно число — общая выручка. Если число дробное, выведи с точностью до 2 знаков после запятой.
| |
|
|
Статистика библиотеки
Задача на реализацию
Библиотека хранит данные о книгах по жанрам в формате JSON. Структура вложенная: внутри объекта есть жанры, внутри жанров — списки книг.
Найди общее количество книг во всей библиотеке.
Формат входных данных
JSON-объект с полем `"genres"` — массив жанров. Каждый жанр имеет:
- `"name"` — название жанра
- `"books"` — массив книг (каждая книга — объект с полями title и author)
Формат выходных данных
Одно целое число — общее количество книг.
| |
|
|
Поиск отличников
Задача на реализацию
В школьной системе хранятся данные об учениках в формате JSON.
Найди и выведи имена всех отличников — учеников, у которых средний балл (average_score) больше или равен 90.
Формат входных данных
JSON-объект с полем `"students"` — массив учеников. Каждый ученик имеет поля:
- `"name"` — имя ученика
- `"class"` — класс
- `"average_score"` — средний балл (число от 0 до 100)
Формат выходных данных
Имена отличников, каждое на отдельной строке, в том порядке, в котором они встречаются во входных данных.
Если отличников нет — выведи Нет отличников.
| |
|
|
Подсчёт товаров в корзине
Задача на реализацию
Интернет-магазин хранит данные о корзине покупателя в формате JSON.
Дан JSON с информацией о корзине. Нужно вывести общее количество товаров в корзине (сумму всех `quantity`).
Формат входных данных
JSON-объект с полем items — массив товаров. Каждый товар имеет поля:
- name — название товара
- price — цена
- quantity — количество
Формат выходных данных
Одно целое число — общее количество товаров.
| |
|
|
Гирлянда
Задачи на процедуры и функции
Задача на реализацию

Часть 1
Напиши функцию lantern(size, c), которая рисует фонарик.
Параметры функции:
size — диаметр круга (число)
c — цвет фонарика (строка)
Порядок рисования
- Подвес — коричневый (
"brown") закрашенный прямоугольник:
- Круг — закрашенный круг под подвесом:
- цвет: параметр
c
- диаметр: параметр
size
- круг рисуется так, чтобы он был по центру подвеса
Часть 2
После функции напиши основную программу, которая рисует гирлянду из 6 фонариков в ряд.
Должна получиться гирлянда из 6 разноцветных фонариков разного размера. Порядок следования фонариков следуюший:
красн жёлт зелён красн жёлт зелён
40 35 45 35 40 35
Первый фонарик рисуется из точки (0, 0), каждый следующий сдвигается по оси х на 50 вправо.
Пример вызова
lantern(50, "red") # красный фонарик диаметром 50
lantern(30, "yellow") # жёлтый фонарик диаметром 30
Подсказки
- Используй
begin_fill() и end_fill() для заливки
- Для круга используй
circle(-size/2) — минус нужен, чтобы круг рисовался справа от черепашки
- Не забудь поднимать и опускать перо (
pu(), pd()) в нужных местах
| |
|
|
Упражнение 6. Простое дерево решений
Задача на реализацию
Дерево решений состоит из узлов двух типов:
1. Внутренний узел — содержит номер признака (feature_index) для разделения.
Если значение признака = 0, идём в левое поддерево.
Если значение признака = 1, идём в правое поддерево.
2. Лист — содержит предсказание (prediction), которое возвращается как ответ.
Пример дерева:
[feature_index 0]
/ \
значение=0 значение=1
/ \
[feature_index 1] лист(1)
/ \
лист(0) лист(1)
Для примера [0, 1, 0]:
- Корень: feature_index=0, значение признака 0 равно 0 → идём налево
- Узел: feature_index=1, значение признака 1 равно 1 → идём направо
- Лист: prediction=1 → ответ 1
Реализуй класс TreeNode с тремя методами:
1. __init__(self, feature_index=None, left=None, right=None, prediction=None)
Сохраняет все параметры как атрибуты объекта.
2. is_leaf(self)
Возвращает True, если узел является листом (у него есть prediction).
Возвращает False, если узел внутренний.
3. predict_one(self, sample)
Делает предсказание для одного примера.
- Если узел — лист, возвращает prediction
- Иначе смотрит на sample[feature_index]:
- если 0 → рекурсивно вызывает predict_one у левого поддерева
- если 1 → рекурсивно вызывает predict_one у правого поддерева
Примеры использования:
Пример 1
# Создание листа
leaf = TreeNode(prediction=1)
leaf.is_leaf() # True
leaf.predict_one([0, 1, 0]) # 1
Пример 2
# Создание дерева глубины 1
tree = TreeNode(
feature_index=0,
left=TreeNode(prediction=0),
right=TreeNode(prediction=1)
)
tree.is_leaf() # False
tree.predict_one([0, 1, 0]) # 0 (sample[0]=0 → налево)
tree.predict_one([1, 0, 0]) # 1 (sample[0]=1 → направо)
| |
|
|
Три дуги
Задача на реализацию
Нарисуйте цветной рисунок из трёх дуг (каждая дуга это полуокружность - угол 180 градусов)
- Начало в (0, 0).
- Фиолетовая дуга радиусом 150 (рисуется вверх вправо).
- Желтая дуга радиусом 100.
- Зеленая дуга радиусом 50.
- Жёлтая и зеленая дуги находятся внутри фиолетовой так как показано на рисунке
У каждой дуги цвет контура и цвет заливки одинаковый
| |
|
|
🐛 Гусеница
Задача на реализацию
🐛Нарисуй гусеницу
- Начни рисовать с точки (0, 0) (С тела гусеницы)
- Нарисуй 8 зелёных точек размером 40 пикселей (цвет зелёный)
- Каждая следующая точка должна быть на расстоянии 30 пикселей правее от центра предыдущей
- Голова гусеницы должна быть рамеров 50 пикселей
- Нарисуй левый глаз: белая точка размером 12 пикселей в позиции (235, 10) (цвет:
"white") и чёрная точка (зрачок) размером 6 пикселей в позиции (235, 10) (цвет: "black")
- Нарисуй правый глаз: белая точка размером 12 пикселей в позиции (250, 10) (цвет:
"white") и чёрная точка (зрачок) размером 6 пикселей в позиции (250, 10) (цвет: "black")
- Нарисуй рот: чёрная точка размером 4 пикселя в позиции (245, -5) (цвет:
"black")
| |
|
|
Н
Линейные алгоритмы
Задача на реализацию
Нарисуйте букву "H" из трёх линий
-
Начальная точка: (0, 0)
-
Черепашка идёт вверх 100 (левая вертикаль), затем перемещается в (0, 50) без рисования,
-
Рисует горизонтальную линию вправо 50 (перекладина),
-
Перемещается в (50, 0) без рисования,
-
Рисует вертикаль вверх 100 (правая).
Буква должна состоять ровно из трех линий!
| |
|
|
G. Keep talking and nobody explodes – medium
Задача на реализацию
This is an unusual problem in an unusual contest, here is the announcement: http://cf.m27.workers.dev/blog/entry/73543 You have the safe lock which consists of 5 decimal digits. If you rotate some digit, it increases by one, except 9 which becomes 0. Initially, the lock contains number \(x\). To unlock the safe you must do the following operations in order (and be careful, don't mix up if and else statements). If sum of digits on positions 3 and 4 is greater than 10, rotate digit on position 2 by 9 times, else rotate digit on position 5 by 4 times. If digit on position 3 is greater than digit on position 5, rotate digit on position 2 by 4 times, else rotate digit on position 4 by 6 times. If digit on position 5 is greater than digit on position 3, rotate digit on position 2 by 1 times, else rotate digit on position 1 by 7 times. If sum of digits on positions 4 and 1 is greater than 8, rotate digit on position 2 by 7 times, else rotate digit on position 3 by 3 times. If digit on position 4 is greater than digit on position 1, rotate digit on position 2 by 3 times, else rotate digit on position 3 by 2 times. If sum of digits on positions 1 and 2 is greater than 9, rotate digit on position 3 by 6 times, else rotate digit on position 5 by 3 times. If digit on position 3 is greater than digit on position 2, rotate digit on position 1 by 2 times, else rotate digit on position 4 by 5 times. If digit on position 5 is greater than digit on position 3, rotate digit on position 2 by 1 times, else rotate digit on position 4 by 5 times. If sum of digits on positions 5 and 1 is greater than 10, rotate digit on position 4 by 7 times, else rotate digit on position 3 by 5 times. If sum of digits on positions 5 and 4 is greater than 9, rotate digit on position 3 by 9 times, else rotate digit on position 2 by 4 times. If sum of digits on positions 3 and 1 is greater than 8, rotate digit on position 2 by 8 times, else rotate digit on position 4 by 4 times. If digit on position 5 is greater than digit on position 2, rotate digit on position 1 by 5 times, else rotate digit on position 3 by 8 times. If sum of digits on positions 1 and 4 is greater than 10, rotate digit on position 3 by 4 times, else rotate digit on position 5 by 1 times. If digit on position 3 is greater than digit on position 5, rotate digit on position 2 by 1 times, else rotate digit on position 1 by 6 times. If sum of digits on positions 1 and 5 is greater than 9, rotate digit on position 3 by 3 times, else rotate digit on position 2 by 1 times. If digit on position 5 is greater than digit on position 1, rotate digit on position 4 by 8 times, else rotate digit on position 2 by 1 times. If digit on position 4 is greater than digit on position 1, rotate digit on position 3 by 4 times, else rotate digit on position 5 by 4 times. If sum of digits on positions 3 and 1 is greater than 8, rotate digit on position 5 by 3 times, else rotate digit on position 2 by 6 times. If digit on position 3 is greater than digit on position 4, rotate digit on position 2 by 3 times, else rotate digit on position 1 by 5 times. If digit on position 5 is greater than digit on position 4, rotate digit on position 2 by 7 times, else rotate digit on position 3 by 8 times. If digit on position 2 is greater than digit on position 4, rotate digit on position 5 by 9 times, else rotate digit on position 1 by 4 times. If sum of digits on positions 3 and 5 is greater than 10, rotate digit on position 4 by 1 times, else rotate digit on position 2 by 5 times. If digit on position 4 is greater than digit on position 1, rotate digit on position 3 by 9 times, else rotate digit on position 2 by 9 times. If digit on position 5 is greater than digit on position 3, rotate digit on position 2 by 4 times, else rotate digit on position 1 by 6 times. If sum of digits on positions 3 and 4 is greater than 9, rotate digit on position 5 by 8 times, else rotate digit on position 2 by 5 times. If sum of digits on positions 3 and 4 is greater than 10, rotate digit on position 5 by 2 times, else rotate digit on position 1 by 5 times. If sum of digits on positions 5 and 4 is greater than 9, rotate digit on position 3 by 3 times, else rotate digit on position 1 by 8 times. If digit on position 5 is greater than digit on position 2, rotate digit on position 1 by 4 times, else rotate digit on position 3 by 8 times. If digit on position 3 is greater than digit on position 1, rotate digit on position 5 by 6 times, else rotate digit on position 2 by 6 times. If digit on position 4 is greater than digit on position 5, rotate digit on position 1 by 6 times, else rotate digit on position 3 by 1 times. If sum of digits on positions 3 and 5 is greater than 10, rotate digit on position 2 by 5 times, else rotate digit on position 1 by 7 times. If sum of digits on positions 5 and 2 is greater than 9, rotate digit on position 4 by 9 times, else rotate digit on position 3 by 5 times. If sum of digits on positions 2 and 4 is greater than 10, rotate digit on position 3 by 1 times, else rotate digit on position 1 by 2 times. If digit on position 3 is greater than digit on position 4, rotate digit on position 5 by 7 times, else rotate digit on position 2 by 1 times. If digit on position 2 is greater than digit on position 5, rotate digit on position 1 by 6 times, else rotate digit on position 4 by 2 times. If digit on position 2 is greater than digit on position 1, rotate digit on position 5 by 3 times, else rotate digit on position 4 by 4 times. If digit on position 5 is greater than digit on position 4, rotate digit on position 3 by 9 times, else rotate digit on position 1 by 9 times. If digit on position 1 is greater than digit on position 5, rotate digit on position 4 by 6 times, else rotate digit on position 2 by 5 times. If sum of digits on positions 1 and 5 is greater than 10, rotate digit on position 3 by 7 times, else rotate digit on position 2 by 4 times. If sum of digits on positions 2 and 1 is greater than 9, rotate digit on position 3 by 7 times, else rotate digit on position 5 by 4 times. Output Output the number after applying all operations.
| |
|
|
Задача. Время-оценка
Задача на реализацию
Линейная регрессия
Создайте модель, которая предсказывает оценку на экзамене в зависимости от потраченных часов на подготовку.
Формат входных данных
В первой строке записано натуральное число n (n <= 1000). Вторая и третья строки содержат соответственно время подготовки (в часах) и количество баллов набранных на экзамене i-м студентом (1<=i<=n). Все числа положительные целые. В первой строке числа не превышают 10, во второй строке - не превышают 100.
Выполните следующие задания
1. Создайте DataFrame из входных данных
2. Обучите модель LinearRegression
3. Предскажите оценку для студента, который готовился 5.5 часов
4. Во второй строке выведите через пробел два числа: коэффиценты k и b линии регрессии
6. В третьей строке выведите время подготовки, необходимое для получения чтобы получить 75 баллов
Все числа необходимо вывести с точностью до одного знака после запятой
| |
|
|
Все слова на p
Строки
Задача на реализацию
Конечные автоматы
Словом называется последовательность символов ограниченная слева и справа пробелом или началом(концом) строки. Найдите все слова, начинающиеся на английскую букву p (без учета регистра).
Формат входных данных
Строка, состоящая из букв английского алфавита. Длина строки не более 1000 символов.
Формат выходных данных
Выведите все найденные слова в одной строке, разделяя их одним пробелом. Порядо слов должен быть таким же как в исходной строке.
| |
|
|
Обои и дипломы
Вывод формулы
Задача на реализацию
Родители Андрея решили поклеить на одну из стен в его комнате новые обои. Высота стены n сантиметров, а ширина m сантиметров. К сожалению, обои, выбранные родителями, Андрею не понравились, и он решил их чем-нибудь закрыть. Так как он участвовал в большом количестве олимпиад, у него накопилось много дипломов. Все дипломы у Андрея одинаковые это прямоугольники высотой a сантиметров и шириной b сантиметров. Помогите Андрею узнать, сколько квадратных сантиметров обоев он сможет завесить дипломами, если не будет их разрезать и переворачивать. Все дипломы должны целиком размещаться внутри стены и не накладываться друг на друга.
Формат входных данных
В первой строке входных данных находится целое число n (1 n ≤ 2 ·109) высота стены.
Во второй строке находится целое число m (1 ≤ m ≤ 2 · 109) ширина стены.
В третьей строке находится целое число a (1 ≤ a ≤ 2 ·109) высота диплома.
В четвёртой строке находится целое число b (1 ≤ b ≤ 2 · 109) ширина диплома.
Формат выходных данных
Выведите одно целое число площадь части стены, которая будет закрыта дипломами, если их не поворачивать, не обрезать и не накладывать друг на друга.
Обратите внимание, что значение ответа в этой задаче может превышать возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в С и С++, тип long в Java и С#).
Замечание
В примере из условия можно разместить 6 дипломов, суммарная площадь которых равна 12 квадратным сантиметрам. Большее число дипломов разместить нельзя, они будут вылезать за границы стены.

| |
|
|
Ремонт забора
Жадный алгоритм
Задача на реализацию
Забор состоит из N одинаковых вертикальных досок. Некоторые из досок сгнили и нуждаются в замене, для каждой доски известно, нужно ли её заменить. Для ремонта забора можно использовать продающиеся в магазине щиты, которые бывают L разных видов: шириной в 1 доску, в 2 доски, ..., в L досок. Щит нельзя разрезать на части, то есть одним щитом можно заменить не более любых L подряд идущих досок. При этом можно менять не только сгнившие доски, но и хорошие.
Оказалось, что все щиты стоят одинаково, независимо от размера щита. Определите, какое наименьшее число щитов необходимо приобрести, чтобы починить весь забор.
Входные данные
Первая строка входных данных содержит целое число L (L > 0) – максимальный размер щита. Во второй строке входных данных записано целое число N (N > 0) – количество досок в заборе. Следующие N строк содержат по одному числу, равному 0 или 1. Число 1 обозначает, что соответствующая доска в заборе нуждается в замене, число 0 – что доска может быть сохранена.
Выходные данные
Программа должна вывести одно целое число – минимальное число щитов, которое необходимо приобрести для ремонта всего забора.
| |
|
|
Все теги товаров
Строки
Задача на реализацию
re.finditer(pattern, string) - находит все совпадения, возвращает итератор.
- Возвращает: итератор объектов Match
- Использование:
for match in re.finditer(r'\d+', text):
match.groups(default=None) - возвращает все захваченные группы в виде кортежа
Особенности:
-
Возвращает ВСЕ группы из шаблона
-
Группы нумеруются с 1 (group(1), group(2))
-
Если группа не найдена, возвращает default (по умолчанию None)
match.group(0) - найденная строка
Найти все теги товаров и вывести их вместе с названиями товаров.
Формат вывода
Товар: iPhone_14
Теги: Premium, New
Полное совпадение: Name: iPhone_14, Price: 999.99$, Category: Electronics, Tags: [Premium, New]
| |
|
|
Парсинг заказов
Строки
Задача на реализацию
Извлечь номера заказов и общие суммы. Вывести в виде списка кортежей.
Например,
('1001', '2049.97')
...
| |
|
|
Удаление дубликатов
Задача на реализацию
Алгоритмы обработки
Дубликаты - одинаковые строки в данных, которые могут исказить анализ.
Основные методы
df.duplicated() - находит дубликаты (возвращает True/False)
df.drop_duplicates() - удаляет дубликаты
df.nunique() - количество уникальных значений
Параметры drop_duplicates()
subset - столбцы для проверки дубликатов
keep - какую копию оставить ('first', 'last', False)
ignore_index - пересоздает аккуратный последовательный индекс (0, 1, 2, 3, 4...).
Пример
df_clean = df.drop_duplicates() # Удалить полные дубликаты
df_partial = df.drop_duplicates(subset=['name']) # По имени
df_last = df.drop_duplicates(keep='last') # Оставить последний
Задание
1) Посчитайте количество полных дубликатов в прикрепленном датасете (программа должна вывести целое число)
2) Удалите все полные дубликаты и выведите размер получившегося датасета.
| |
|
|
Обработка пропусков
Библиотеки Python
Задача на реализацию
Обработка пропусков
df.dropna() - удаляет строки с пропусками
df.fillna(value, inplace=True) - заполняет пропуски значением value
df.fillna(df.mean(), inplace=True) - заполняет средним значением
Параметр inplace:
inplace=False (по умолчанию) - создает копию с изменениями
inplace=True- изменяет исходный DataFrame напрямую
Метод fillna() с словарем позволяет заполнить пропуски в разных столбцах различными значениями за одну операцию. Синтаксис:
df.fillna({'column1': value1, 'column2': value2, ...})
Пример
df = ...
# Заполнение разными значениями
fill_dict = {
'age': df['age'].mean(), # Средним значением
'salary': df['salary'].median(), # Медианой
'city': 'Unknown' # Константой
}
df_filled = df.fillna(fill_dict)
print(df_filled)
Задание
Проанализируйте датасет супергероев, считав его из прикрепленного файла
Напишите программу, который ищет и обрабатывает пропуски.
- Заполните пропуски в
power и intelligence средними значениями
- Заполните пропуски в
costume_cost медианным значением
- Заполните пропуски в
first_appearance значением 1950
- Для текстовых полей (
name, alias, universe) заполните пропуски строкой Unknown
Выведите обработанный датасет на экран, используя print(df)
| |
|
|
Поиск пропусков
Задача на реализацию
Алгоритмы обработки
Пропущенные значения (NaN, None, NULL) - одна из главных проблем при анализе данных.
Поиск пропусков
df.isnull() - находит пропуски
df.isnull().sum() - считает пропуски по столбцам
Задание
Проанализируйте датасет супергероев, считав его из прикрепленного файла
Напишите программу, который ищет пропуски. Выведите
- В первой строке - количество пропусков в каждом столбце (семь целых чисел через пробел)
- Во второй строке - процент пропущенных значений (отбросив дробную часть) для каждого столбца (семь целых чисел через пробел)
Числа должны быть в порядке перечисления столбцов в датасете.
Пример вывода (пример дан для понимания формата вывода):
1 2 3 2 1 1 4
10 20 30 20 10 10 40
| |
|
|
Счётчик парадоксов
Алгоритмы обработки
Задача на реализацию
Цикл for
⏰ Починка машины времени:
[██████████████░░░░░░] 71% - Модуль 5 из 7 восстановлен
✅ Генератор порталов: КАЛИБРУЕТСЯ
⚡ Энергия растет!
Профессор Хронос обнаружил странные сигналы!
Кто-то уже путешествовал во времени и оставил временные маячки — метки в разных эпохах.
Каждый маячок имеет координату относительно 2025 года:
- Отрицательное число = маячок в прошлом (например, -50 означает 1975 год)
- Положительное число = маячок в будущем (например, +30 означает 2055 год)
- Ноль = сигнал остановки сканирования
Машина времени должна уметь сканировать временную линию и обнаруживать маячки. Необходимо написать программу для анализа найденных маячков и загрузить ее в машину времени.
Что должна делать программа:
- Считывать координаты маячков (числа), пока не получит сигнал стоп (число ноль)
- Подсчитать:
- Сколько маячков в прошлом (отрицательные координаты)
- Сколько маячков в будущем (положительные координаты)
- Самый древний маячок (наименьшая координата)
- Вывести отчет о сканировании (смотри пример)
💡 Подсказка:
- Текущий год = 2025 (точка отсчета)
- Если координата = -20, это 2025 - 20 = 2005 год
- Если координата = +15, это 2025 + 15 = 2040 год
- Чем меньше число, тем дальше в прошлое!
| |
|
|
66861
Вычислительная геометрия
Задача на реализацию
Задачи на моделирование
Оля обожает лазерное шоу, потому она решила собрать собственную конструкцию из лазеров и зеркал, которая будет поражать всех её знакомых и друзей, но первым делом Оля начала изучать все тонкости своей идеи, создавая конструкцию, состоящую лишь из одного лазера и зеркал. К сожалению, у Оли не оказалось нужного количества зеркал, потому она нашла в гараже небольшие металлические короба, представляющие из себя параллелепипеды.
Для упрощения первой своей конструкции Оля приняла решение рассматривать задачу в виде плоскости таким образом, что лазер будет всегда находиться в начале координат, его направление будет иметь угол кратный 45-ти градусам, а система коробов, от которых он будет отражаться, всегда будет перпендикулярна взгляду (перпендикулярна плоскости OXY). Но также стоит учесть, что короба, от которых будет отражаться свет, имеют как свойства отражения света, так и преломления, притом со всех четырёх сторон. Стоит также пренебречь в ходе расчётов тем, что луч лазера может отражаться в обратном направлении, таким образом не теряя интенсивности, а при прохождении через начало координат считаем, что он не прерывается, а летит дальше).
Результатом успеха Оля считает тот случай, когда лазер в следствие отражений попал в результирующую точку, которую Оля заранее знает, но так как лазер имеет батарейку, которая быстро садится, она просит Вас помочь ей заранее определить, будет ли успешным её текущая конструкция.
Для удобства расчётов Оля гарантирует, что точка пересечения луча со сторонами металлических коробов будет всегда целым числом, а стороны короба будут параллельным осям OY и OX.
Входные данные
В первой строке подаются два числа:
- направление лазера, находящегося в начале координат, в виде угла наклона кратного 45 градусам (угол считается против часовой стрелке) (положительное направление оси OX равно 0 градусов, а положительное направление оси OY равно 90 градусам) (угол от 0 до 315 градусов);
- интенсивность света лазера в нановаттах (целое число от 100 до 5000).
- На второй строке подаётся число N (1 <= N <= 20) – количество металлических коробов (параллелепипедов), которые Оля хочет установить. Далее на N строках подаются через пробел параметры каждого короба:
- координаты левого верхнего угла, координаты правого нижнего угла короба (целые числа в диапазоне [-100;100]);
- процент поглощения света (вещественное число в диапазоне [0; 100]).
На последней строке входных данных подаются координаты результирующей точки (целые числа в диапазоне [-100;100])
Выходные данные
Вывести в ответе в случае успеха конструкции интенсивность (только целую часть), с которой луч лазера попадёт в результирующую точку.
Если конструкция не успешна (лазер поглотился более чем на 90% от начальной интенсивности), то вывести координаты первого короба на пути лазерного луча, при отражении от которого интенсивность стала меньше 10% от начального) с указанием полученной интенсивности (только целую часть) (вывод через пробел – координаты левого верхнего угла, правого нижнего, (в том порядке, в котором короб был введена в программу), затем полученная интенсивность).
Гарантируется, что лазер не может улететь в бесконечность, то есть результатом может быть либо поглощение луча, либо попадание в результирующую точку.
| |
|
|
66860
Задача на реализацию
Задачи на моделирование
Компания “РудниК” хочет построить автономный рудодобывающий городок и ей необходимо рассчитать хватит ли её новому городу припасов на автономное существование в течении 100 месяцев. Для автономного существования городу необходимы: токарные изделия, электронные платы, бетон и еда. Изначально в городке находится по 30 единиц каждого ресурса. Каждые 10 месяцев в городок приходит по X единиц каждого ресурса. То есть при наступлении 10-го, 20-го, 30-го месяца и так далее. Чтобы автономно существовать без построек город потребляет по Y единицы каждого ресурса за месяц. Потребление ресурса происходит после поступления ресурсов с заводов и других источников. Если в какой-то месяц один из ресурсов кончится (станет равным 0 или меньше 0), то город закроют, а жителей вывезут. Рудодобывающий город начинает свой отсчёт с дня №1. Администрация города может строить здания, чтобы производить ресурсы самостоятельно:
- - завод по переработке отходов. Стоимость 8 токарных изделий, 3 электронные платы, 10 бетона. Время строительства 5 месяцев. Каждые 2 месяца завод будет выдавать 5 бетона и 2 токарных изделия. Потребляет 3 токарных изделия каждые 5 месяцев. ID завода - 1.
- - теплица. Стоимость 8 бетона и 5 токарных изделий. Время строительства 5 месяцев. Каждые 5 месяцев теплица будет приносить 7 еды. Потребляет 2 бетона каждые 10 месяцев. ID завода - 2.
- - завод по производству электроники. Стоимость 6 электронных плат, 10 токарных изделий, 10 бетона. Время строительства 10 месяцев. Каждые 10 месяцев будет выдавать по 6 электронных плат. Потребляет 2 токарных изделия каждые 18 месяцев. ID завода - 3.
- - завод по производству бетона. Стоимость 4 электронные платы, 8 токарных изделий, 8 бетона. Время строительства 8 месяцев. Каждые 8 месяцев будет выдавать по 8 бетона. Потребляет 1 токарное изделие и 1 электронную плату каждые 12 месяцев. ID завода - 4.
Завод начинает приносить доход или начинает вести отсчёт до выдачи новых ресурсов на следующий месяц после завершения его постройки или прошлой выдачи ресурсов. Если завод приносит ресурсы на n-ый месяц, на следующий n+1 месяц начинается отсчёт прихода ресурсов в новом цикле. Представим, что теплица начнёт строительство в 5-ый месяц, значит её строительство завершится на 9-ый месяц, производить ресурсы она будет с 10-го месяца, а первый “урожай” будет собран на 14-ый месяц. Администрация города может построить несколько заводов, если у неё хватает на это ресурсов. Можно начать строительство завода только, если на момент начала строительства все ресурсы есть в наличии. Месяц начала строительства завода полностью учитывается во времени его строительства. Только разные заводы/строения могут строится одновременно. Эффекты от нескольких заводов складываются.
Формат входных данных
На вход программа получает 2 числа 0<=X<=40, 1<=Y<=40, количество ресурсов, которые колония получается и тратит соответственно. И двумерный массив (каждый элемент на новой строке), размером 4 на 5, указывающий в какой месяц должно начаться строительство того или иного здания. Где по вертикали - ID строения/завода, а по горизонтали номер планируемой к строительству постройки. Каждую постройку могут построить максимально 5 раз. Если в столбце строения указано число 0, значит завод/строение не строится.
Формат выходных данных
На выходе программа должна выдать количество месяцев, которые город смог самостоятельно себя обеспечивать, если он просуществовал 100 месяцев, значит город признан успешным. На следующих строках вывести остаток ресурсов на момент завершения расчётов, не важно успешных или неуспешных. Числа могут принимать отрицательные значения.
Строка 1: Кол-во прожитых месяцев; 2: Токарных изделий; 3: Электронных плат; 4:Бетона; 5:Еды.
| |
|
|
66153
Задача на реализацию
Задачи на моделирование
реализация
Иван Фёдорович сыщик с очень большим стажем. Однажды в городе произошла серия больших ограблений. На местах ограбления не было обнаружено ни улик, ни зацепок. Однажды грабителей практически застали врасплох, но они смогли скрыться. На месте преступления Иван Фёдорович заметил, что грабители обронили папку с листком и набором картонных карточек, с вырезанными окошками на этих картах. Придя в офис и рассмотрев улики подробнее, было замечено, что на листке напечатана прямоугольная матрица, состоящая из цифр, а карточки все были размером с матрицу, притом отверстия, вырезанные в карточках, отображали какие-то случайные цифры из матрицы.
Иван Фёдорович вспомнил, что когда-то сталкивался с подобной схемой обозначения мест ограбления, что карточки помогали определить координаты следующего места ограбления. Потому Иван Фёдорович решил выписать координаты всех мест преступлений в виде долготы и широты, а далее найти карточки, которые соответствуют координатам следующих мест преступлений.
Помогите ему быстрее найти преступников, определив координаты следующих мест преступлений.
Координаты преступления собираются при помощи карточки следующим образом:
- на матрицу накладывается карточка;
- далее двигаясь по каждой строке по порядку слева-направо, выписываются цифры, которые попали в прорези;
- цифр всегда 18, притом координаты всегда состоят из 8цифр (две целой части, шесть вещественной), значит два символа игнорируются и обозначают точку в вещественном числе в соответствующем порядке.
Пример матрицы и карточки (где белые участки – это вырезы (отверстия)).

Таким образом начинаем выписывать цифры по строкам слева-направо: 554755831378617673. Знаем, что цифр обозначающих координату 8, а две лишние – обозначающие запятые, получим координаты 55.755831 37.617673.
Также на каждой карточке Иван Фёдорович заметил на углу пометку, которая, как позднее он понял, определяет, как должна быть развёрнута карточка, так как метка должна при наложении всегда находиться в левом верхнем углу при взгляде на неё:
- 1 – метка в левом верхнем углу карточки;
- 2 – метка в правом верхнем углу карточки;
- 3 – метка в правом нижнем углу карточки;
- 4 – метка в левом нижнем углу карточки.
Входные данные
на первой строке подаётся целое число K (2 <= K <= 100) – количество преступлений, которые совершили грабители;
далее на K строках подаются координаты предыдущих мест преступлений в виде вещественных чисел с точкой, разделённых пробелом (например, 55.755831 37.617673)
на следующей строке подаются размеры матрицы и карточек в виде целых чисел N, M (5 <= N,M <= 1000), где N – количество строк матрицы, а M – количество столбцов;
далее на N строках подаются по M цифр матрицы;
после подаётся на новой строке целое число – количество карточек L (K < L <= 100);
далее подаётся на одной строке L цифр от 1 до 4 через пробел, которые отображаются метки карточка в соответствии с порядком их появления;
затем L раз по N строк и M цифр подаются карточки по порядку их появления, которые содержат либо цифру 1 – обозначающую наличие прорези на ней, либо 0 – если прорези в этом месте на карточке нет.
Выходные данные
выведите все координаты будущих мест преступлений (каждую с новой строки), отсортировав их по возрастанию (если две координаты одинаковые по первой координате, то сортировать по возрастанию по второй), координаты одного места выводить через пробел.
Примечание:
·при выводе дробной части координат выводить всегда 6 знаков, если знаков меньше, то дополнять их незначащими нулями;
·если матрица прямоугольная, то гарантируется, что при совмещении метки на карточке с левым верхним углом матрицы, карточка совпадёт с размером матрицы;
·данные на карточках нельзя отзеркаливать (переворачиватькарточки не в плоскости OXY);
·гарантируется, что если даны метки на карточках, то при повороте карточка совпадёт с размером матрицы, не будет такого, что карточка будет иного размера, чем матрица.
| |
|
|
65982
Задачи на моделирование
Задача на реализацию
Электронная схема состоит из элементов И и НЕ.
Элемент НЕ имеет один вход и один выход. Принцип его работы следующий: если на входе появится сигнал 0, то через 1 мс на выходе установится сигнал 1, а если на входе 1, то через 1 мс на выходе установится сигнал 0.
Элемент И имеет два входа и один выход. Если на обоих его входах появится сигнал 1, то через 1 мс на выходе установится сигнал 1. Если хотя бы на один из входов поступает 0, то через 1 мс на выходе устанавливается сигнал 0.
Все точки подсоединения элементов пронумерованы. Если в точку поступает сигнал с выходов нескольких элементов, то в этой точке сигнал равен 0 тогда, когда со всех выходов поступает сигнал 0. Если с одного или нескольких выходов, подсоединенных в одной точке, поступает сигнал 1, то в этой точке устанавливается сигнал 1. В последних двух случаях сигнал устанавливается мгновенно (без задержки).
Известно состояние (сигнал 0 или 1) каждой точки в момент включения схемы. Необходимо выдать состояние некоторой указанной точки К в течение первых T мс с момента включения схемы.
В точках, которые соединены только с входами элементов, сигнал остается неизменным с момента включения схемы до окончания ее работы.
Формат ввода
На вход программе в первой строке подаётся натуральное число N. Далее идет N строк, каждая из которых содержит несколько целых десятичных чисел, отделенных друг от друга одним или несколькими пробелами. Первое число в строке показывает, что именно описывают оставшиеся числа данной строки:
0 - описание точки соединения;
0 m n - точка с номером m имеет в момент включения состояние n (0 или 1)
1 - описание элемента НЕ;
1 x y - элемент НЕ, вход которого соединен с точкой под номером x, а выход - с точкой под номером y
2 - описание элемента И;
2 x y z - элемент И, один вход которого соединен с точкой под номером x, второй вход соединен с точкой под номером y, а выход - с точкой под номером z
3 - описание задания.
3 K T - необходимо выдать состояние точки K в течение первых T мс с момента включения схемы.
Формат вывода
T строк: первая строка - состояние точки K в первую мс, вторая строка - состояние точки K во вторую мс, и так далее до T мс.
Пример
Пусть имеется схема, приведенная на рисунке. Необходимо выдать состояние точки 3 в течение 5 мс с момента включения схемы.

| |
|
|
65819
Задача на реализацию
Задачи на моделирование
Находясь в агрессивной среде аппарат, снабженный целым комплексом датчиков, мониторит сразу несколько параметров. Необходимо написать программу анализа для параметра F. Этот параметр принимает целые значения. Задан диапазон допустимых значений [X; Y] (границы отрезка тоже являются допустимыми значениями). Каждую минут снимаются показания с датчика F. После выключения оборудования датчик показывает 0. Это значение в серию измерений уже не включается. Необходимо посчитать наибольшее отклонение от допустимых значений и сколько раз за время наблюдения оно было зафиксировано.
Формат входных данных
На первых двух строчках вводятся два целых числа X и Y (X < Y), которые задают диапазон допустимых значений.
На последующих строчках вводятся целые числа (по одному в каждой строке) – показания параметра F, передаваемые аппаратом. Последнее значение 0 – признак выключения аппарата – это значение в показания НЕ включается.
Все числа по модулю не превосходят 1 000.
Гарантируется, что хотя бы один выход из допустимого диапазона значений был.
Формат выходных данных
Два целых числа в одной строке через пробел: максимальное отклонение и количество отклонений на такое значение за время наблюдения.
Примечание
В данном примере 11 измерений. Максимальное отклонение 2 от заданного допустимого диапазона [-4; 11] будет достигнуто 3 раза на значениях -6, 13 и 13
|-6 – (-4)| = |13 – 11| = 2
| |
|
|
65816
Задачи на моделирование
Задача на реализацию
В сказочном мире Геомаба живут необычные существа в виде прямоугольников. Все они разного размера, но передвигаются все они одинаково –перекатыванием сбоку на бок. В очередной из дней жители Геомаба решиливыбрать себе мэра, так как дороги в их мире очень опасные – в них очень многоям и в них легко застрять, так как жители-прямоугольники могут передвигатьсятолько по плоским дорогам.
Мэр решил незамедлительно собрать группу добровольцев и направить их по дорогам Геомаба, но дорог так много, что Мэр понял, что отправлять добровольцев, а потом вытаскивать их из ям – дело трудозатратное, потому он обратился к Вам за помощью – написать алгоритм, который по размеру прямоугольника покажет все ямы, которые необходимо залатать, чтобы житель-прямоугольник смог спокойно передвигаться по дороге, а город потратил минимально ресурсов (заделал как можно меньше ям).
Прямоугольник считается застрявшим, если он не смог беспрепятственно перекатиться через яму (его угол попал в яму (не включая начало и конец ямы)).
Если прямоугольник попал не углом в яму, а попал точно стороной на границы ямы, то он не считается застрявшим.
Формат входных данных
На вход на первой строке подаётся число X (1 <= X <= 100000) – длина дороги в метрах.
На второй строке подаются числа W, H (1 <= W,H <= 100) – высота и ширина жителя-прямоугольника в метрах соответственно.
На третьей строке подаётся число N (1 <= N <= 1000) – количество ям на дороге.
Далее на N-строках подаются координаты начала ямы (в метрах от начала дороги) и её ширина в виде целых положительных чисел от 1 до X. Координаты ям могут подаваться в любом порядке. Но все ямы не пересекаются и не накладываются.
Формат выходных данных
Выведите на первой строке количество ям, которые необходимо заделать, чтобы житель-прямоугольник, для которого производится расчёт, смог добраться до конца дороги.
Далее выведите координаты всех ям отсортированные в порядке появления от начала дороги до конца, КАЖДУЮ С НОВОЙ СТРОКИ.
Примечание
Житель-прямоугольник перед стартом дороги находится так, что три его вершины находятся за пределом начала дороги, а одна вершина, являющаяся самой правой, стоит на позиции 0. Первоначальное положение жителя-прямоугольника может быть любым, нужно выбрать оптимальное, чтобы залатать как можно меньше ям.
Если решений несколько, выведите то, в котором сумма координат ям для залатывания наименьшая.
В данном случае житель может стоять основанием перед началом дороги на стороне 2 (положение №1) или 3 (положение №2).
Если он стоит на основании длиной 2, то он попадёт только в яму под номером 14.
Если он стоит на основании длиной 3, то он попадёт в ямы 10 и 14.
Городу выгоднее заделать только одну яму, под номером 14.
Положение №1.

Положение №2.

| |
|
|
65815
Задачи на моделирование
Задача на реализацию
В школе №1920 решили провести соревнование по написанию небольших игр среди школьников. Первым критерием данного соревнования было условие того, что в игре нельзя заранее рассчитать результат зная входные данные.
Коля написал игру, в которой задаётся квадратная матрица, состоящая из целых чисел, но не содержащая нулей. Суть игры в том, что в неё играют два участника и каждый может сделать одно из следующих действий:
1.Повернуть матрицу на 90 градусов по часовой стрелке
2.Повернуть матрицу на 90 градусов против часовой стрелке
3.Повернуть матрицу на 45 градусов по часовой стрелке (если есть нули,то они схлопываются (см. пример))
4.Повернуть матрицу на 45 градусов против часовой стрелке (если естьнули, то они схлопываются (см. пример))
У игроков есть ограниченное чётное количество ходов. Каждый из игроков ходит по очереди. Победой в игре считается сумма чисел на ближайшей стороне матрицы, которая находится ближе к игроку. Если матрица в конце повёрнута на 45 градусов, то результатом берётся ближайший угол матрицы к каждому из игроков (одно число в вершине).
Помогите Коле написать алгоритм, который будет по входной матрице и порядку действий ребят определять сколько очков набрал игрок №1 и игрок №2.
Поворот квадратной матрицы на 45 градусов по часовой стрелке будет выглядеть следующим образом.
Формат входных данных
На вход первой строкой подаются число N (1 <= N <= 1000) – размер исходной сгенерированной квадратной матрицы (N – количество строк). Далее на N строках подаются по N целых чисел (кроме нуля).
Далее подаётся число K (2 <= K <= 100, K – чётное)– количество ходов у игроков.
На последующих K-строках вводятся команды, которые выбрали ребята (от 1 до 4), где первая команда соответствует первому игроку (сидящему слева), следующая команда второму (сидящему справа) и так далее.
Формат выходных данных
Вывести на одной строке через пробел результат игры для первого игрока и для второго.
Примечание:
1 команда (повернуть на 90 градусов по часовой стрелке)
2 команда (повернуть на 45 градусов по часовой стрелке)
| 0 |
0 |
7 |
0 |
0 |
| 0 |
8 |
0 |
4 |
0 |
| 9 |
0 |
5 |
0 |
1 |
| 0 |
6 |
0 |
2 |
0 |
| 0 |
0 |
3 |
0 |
0 |
3 команда (повернуть на 90 градусов по часовой стрелке)
| 0 |
0 |
9 |
0 |
0 |
| 0 |
6 |
0 |
8 |
0 |
| 3 |
0 |
5 |
0 |
7 |
| 0 |
2 |
0 |
4 |
0 |
| 0 |
0 |
1 |
0 |
0 |
4 команда (повернуть на 45 градусов против часовой стрелке (нули схлопываются))
Первый игрок находится слева, значит ячейки, которые идут ему в счёт 9 + 6 + 3.
Для второго игрока справа 7 + 4 + 1.
| |
|
|
65795
Задача на реализацию
Алгоритмы обработки
Двумерные массивы
В онлайн-симуляции одной игры был представлен алгоритм уничтожения двух квадратных матриц одинакового размера.
В самом начале симуляции задаются две матрицы, которые стоят вплотную друг к другу.
Далее происходит уничтожение матриц – строки, которые соприкасаются у двух матриц числами, которые равны, уничтожаются (пример на картинке), затем обе матрицы поворачиваются одновременно на 90 градусов по часовой стрелке и повторяется алгоритм уничтожения. Матрицы уничтожаются до тех пор, пока есть чему уничтожаться. Даже если после первого поворота ничего не уничтожилось, то может уничтожиться после нескольких.

В данном случае заданы две квадратные матрицы размер 3*3. Их поставили вплотную друг к другу, соприкасается только одна строка по одинаковым числам (строка 2).

Потому данная строка полностью удаляется в двух матрицах, потому получаем.

Далее каждая матрица вращается по часовой стрелке на 90 градусов.

Далее производятся все те же действия с матрицей по уничтожению.
Задача состоит в том, чтобы вычислить сумму чисел в ячейках матриц после того, как строки больше не будут уничтожаться. Если матрицы полностью уничтожены, то сумма чисел в ячейках равна 0.
Формат входных данных
На первой строке подаётся целое число N – размер квадратных матриц (1 <= N <= 1000).
Далее на N строках подаётся по N целых чисел в диапазоне от -1000 до 1000 – левая матрица.
Далее на N строках подаётся по N целых чисел в диапазоне от -1000 до 1000 – правая матрица.
Формат выходных данных
Вывести на одной строке через пробел сумму чисел оставшихся ячеек левой матрицы и правой матрицы, соответственно.
| |
|
|
Решение систем уравнений
Задача на реализацию
реализация
Напишите программу на Python, которая:
-
Считывает уравнения из строки, разделенных запятой.
-
Преобразует строку в символьное уравнение с помощью SymPy.
-
Решает уравнение.
-
Выводит корни уравнения.
| |
|
|
Решение уравнений
Задача на реализацию
Разбор выражений
Напишите программу на Python, которая:
-
Считывает уравнение из строки.
-
Преобразует строку в символьное уравнение с помощью SymPy.
-
Решает уравнение.
-
Выводит корни уравнения.
| |
|
|
Вывод балла наилучшего выравнивания
Задача на реализацию
реализация
Напишите программу, которая выполняет глобальное выравнивание двух ДНК-последовательностей, и выводит все выравнивания и их score (балл).
Формат входных данных
Две строки содержит две последовательности ДНК, далее вводятся настройки параметров:
- Балл за совпадение
- Балл за несовпадение
- Балл за открытие гэпа
- Балл за продолжение гэпа
Формат выходных данных
Выведите все выравнивания и их score (балл).
| |
|
|
Порядок во всём
Задача на реализацию
Разбор случаев
Вася — очень порядочный мальчик, он любит порядок во всём.
У него в тетради есть столбик натуральных чисел, и он хочет изменить его так, чтобы числа шли по порядку, то есть по неубыванию. При этом Вася, естественно, ничего не хочет зачёркивать, поэтому единственное, что ему остаётся — это дописать цифры в конец некоторых чисел.
Вася хочет, чтобы после дописывания цифр последнее число в списке оказалось наименьшим возможным. Найдите это число.
Формат входных данных
Первая строка входных данных содержит целое число \(n\) (\(2 \le n \le 3 \cdot 10^{5}\)) — количество чисел в тетрадке у Васи.
Следующие \(n\) строк содержат \(n\) чисел, записанных в тетрадке, по одному в каждой строке. Все числа натуральные, не превосходящие \(10^9\).
Формат выходных данных
Программа должна вывести наименьшее число, которое могло оказаться у Васи в конце списка.
Примечание
В первом примере числа уже упорядочены, Васе не нужно ничего дописывать.
Во втором примере Васе можно приписать ко второму числу цифру 3, тогда числа станут равны 13, а значит, будут расположены по неубыванию. При этом 13 — это минимально возможное последнее число.
В третьем примере Вася может, например, получить числа 20, 25, 100. Возможны и другие варианты, но последнее число при любом способе дописывания цифр получится не меньше 100.
| |
|
|
Вывод всех выравниваний - 2
Задача на реализацию
реализация
Напишите программу, которая выполняет глобальное выравнивание двух ДНК-последовательностей, и выводит все выравнивания и их score (балл).
Формат входных данных
Две строки содержит две последовательности ДНК, далее вводятся настройки параметров:
- Балл за совпадение
- Балл за несовпадение
- Балл за открытие гэпа
- Балл за продолжение гэпа
Формат выходных данных
Выведите все выравнивания.
| |
|
|
Вывод всех выравниваний
Задача на реализацию
реализация
Напишите программу, которая выполняет глобальное выравнивание двух ДНК-последовательностей, и выводит все выравнивания и их score (балл).
Формат входных данных
Две строки содержит две последовательности ДНК.
Формат выходных данных
Выведите все выравнивания и их score (балл).
| |
|
|
Туристические маршруты Летовецка
Пересечение множеств
Задача на реализацию
Город Летовецк славится своими туристическими маршрутами. Каждый маршрут проходит через несколько достопримечательностей. Многие туристы желают посетить город, но не у всех хватает времени увидеть все достопримечательности. Туристам предлагают составить список достопримечательностей, которые они бы хотели посетить. Турагент в ответ выбирает для них самый короткий маршрут, включающий все выбранные достопримечательности.
В последнее время туристов стало так много, что турагент не успевает анализирвать маршруты. Помогите автоматизировать работу турагента, чтобы туристы не теряли времени в ожидании своего маршрута!
Формат входных данных
В первой строке вводится натуральное число n - количество туристических маршрутов в городе (1 <= n <= 105). Во следующих n строках вводятся сами маршруты. Каждая строка с маршрутов представляет собой список достопримечательностей (слов), разделенных одним пробелом. Количество достопримечательностей в каждой строке не превышает 109. Каждая достопримечательность записана в виде отдельного слова, состоящего только из английских букв и/или цифр.
Последняя строка содержит список достопримечетельностей, которые хочет увитеть турист. Формат этой строки такой же как и в строках выше.
Гарантируется, что самый короткий подходящий маршрут существует и он единственный.
Формат выходных данных
Выведите самый короткий маршрут, включающий все выбранные туристом достопримечательности. Строка с маршрутом должна соответствовать какой-либо одной строке из входных данных.
| |
|
|
Обработка последовательности РНК
Строки
Задача на реализацию
Напишите программу, которая преобразовывает РНК в ДНК и анализирет получившиюся последоватлеьность.
Формат входных данных
Строка содержит последовательность РНК.
Формат выходных данных
Запишите три строки, являющиеся ответами на задания задачи:
1) Последовательность ДНК.
2) Количество нуклеотида G.
3) Индекс первого вхождения подстроки UA.
| |
|
|
Анализ случайной последовательности ДНК - 2
Строки
Задача на реализацию
Напишите программу, которая анализирует последовательность ДНК.
Формат входных данных
Первая строка содержит последовательность ДНК.
Формат выходных данных
Запишите пять строки, являющиеся ответами на задания задачи:
1) Количество нуклеотида A в последовательности.
2) Количество нуклеотида T в последовательности.
3) Количество нуклеотида G в последовательности.
4) Количество нуклеотида C в последовательности.
5) Индекс первого вхождения подстроки CGT.
| |
|
|
Битая кодировка
Простые числа и разложение на множители
Задача на реализацию
Дед мороз получил очень странное послание! Помогите ему. Напишите программу, которая выводит это сообщение в понятной форме
–Т—Л–≤–µ–і–Є—В–µ –і–≤–∞–і—Ж–∞—В—М –њ–µ—А–≤—Л—Е –њ—А–Њ—Б—В—Л—Е —З–Є—Б–µ–ї
| |
|
|
Новогоднее поздравление
Задача на реализацию
Нарисуйте из символов любую новогоднюю открытку, Вы получите ОК, если проверяющая система согласится, что это красиво, и WA, если не согласится.
| |
|
|
Ты близок к разгадке...
Задача на реализацию
Алгоритмы обработки
После того как Алиса обнаружила самое частое слово в предыдущем файле, она вдруг заметила, что её компьютер начал мигать. На экране появилось сообщение:
"Система обновлена! Новый файл доступен: ЧИСЛО.txt."
P.S. Число в названии файла равно числу, полученному в ответе на предыдущюю задачу. Например, если ответ был 123, то доступен файл 123.txt
С волнением Алиса открыла файл и увидела множество строк текста. И тут же в углу появилась подсказка:
"Найди все строки, что с частого слова начинаются,
После этого слова все тайны шифра открываются!"
P.S. Выведите на экран все нужные строки, в том порядке, в котором они следуют в файле.
| |
|
|
Конкатенация строк. Задание 1
Строки
Задача на реализацию
Напишите программу, которая выполняет следующее:
- Объявите переменную
x и присвойте ей значение "Доброе утро".
- Объявите переменную
y и присвойте ей значение "всем".
- Объедините (конкатенируйте) строки из переменных
x и y, добавив между ними запятую и пробел.
- В конец строки добавьте восклицательный знак.
- Выведите результат на консоль.
Ваш вывод должен быть: Доброе утро, всем!.
| |
|
|
Горнолыжные соревнования
Динамическое программирование
геометрия
Задача на реализацию

Горнолыжник, готовясь к соревнованиям, нарисовал на бумаге схему горнолыжной трассы для выбора оптимального маршрута спуска. На схеме расположенные на трассе ворота представлены горизонтальными отрезками. Никакая пара ворот не имеет общих точек.
Маршрут должен представлять собой ломаную, начинающуюся в точке старта на вершине горы и заканчивающуюся в точке финиша у ее подножия. Маршрут выбирается таким образом, что y-координата каждой следующей вершины ломаной оказывается строго меньше y-координаты предыдущей вершины. Один из возможных маршрутов представлен на рисунке.
За каждые ворота, через которые не проходит маршрут, лыжнику начисляются штрафные очки. Общий штраф за спуск по маршруту вычисляется как сумма длины маршрута и штрафных очков за непройденные ворота.
Требуется написать программу, которая определяет, какой минимальный общий штраф горнолыжник может получить при прохождении трассы.
Входные данные
В первой строке входного файла задано число N - количество ворот на трассе (0 ≤ N ≤ 500), в следующих двух строках заданы Sx, Sy, Fx, Fy - координаты точек старта и финиша соответственно. В каждой из следующих N строк записаны четыре числа ai, bi, yi, ci - x-координаты левого и правого концов ворот, y-координата ворот и штраф за непрохождение данных ворот (ai < bi, Fy < yi < Sy, ci - целое число, 0 ≤ ci ≤ 10000). Все координаты - целые числа, не превосходящие по модулю 10000.
Выходные данные
В выходной файл выведите наименьший возможный общий штраф за прохождение трассы с точностью не менее 4 знаков после десятичной точки.
| |
|
|
Список чисел
Задача на реализацию
Задачи на процедуры и функции
На проверку сдается код, содержащий только описание класса.
Объявите класс с именем ListMath, объекты которого можно создавать командами:
lst1 = ListMath() # должен создаваться пустой список
lst2 = ListMath([1, 2, -5, 7.68]) # список с начальными значениями
В качестве значений элементов списка объекты класса ListMath должны отбирать только целые и вещественные числа, остальные игнорировать (если указываются в списке). Например:
lst = ListMath([1, "abc", -5, 7.68, True]) # ListMath: [1, -5, 7.68]
В каждом объекте класса ListMath должен быть публичный атрибут:
lst_math - ссылка на текущий список объекта (для каждого объекта создается свой список).
Также с объектами класса ListMath должны работать следующие операторы:
lst = lst + 76 # сложение каждого числа списка с определенным числом
lst = 6.5 + lst # сложение каждого числа списка с определенным числом
Команда print(lst1) - в скобка указывается объект класса - должна выводить элементы массива в одной строку, разделяя элементы одним пробелом. В случае если список не содержит элементов, должна выводиться надпись Cписок пуст.
lst1 = ListMath()
print(lst1) # Список пуст
lst2 = ListMath([1, "abc", -5, 7.68, True])
print(lst2) # 1 -5 7.68
| |
|
|
Список четных целых чисел
Библиотеки Python
Задача на реализацию
Разработайте класс EvenList "Список четных целых чисел". Класс содержит в качестве атрибута только список четных целых чисел.
Для класса EvenList определите конструктор, который может принимать следующие виды параметров:
- Ни одного параметра (в этом случае список будет пустой).
- Один параметр типа
List, в этом случае из переданного списка выбираются четные числа и записываются в результирующий список (в том же порядке следования, что и в исходном списке).
- Объект
EvenList, в этом случае список будет равняться списку объекта, переданного в конструктор (порядок элеметов должен сохраняться).
Добавьте в реализацию класса:
- Метод
addnum(), который добавляет к списку число. Если методу addnum() передается целое четное число, то оно добавляется в список, все остальные варианты входных данных игнорируются, при этом выводится сообщение "Wrong data".
- Метод
__sub__, позволяющий выполнять операцию «A - num», которая удаляет из объекта A класса EvenList все вхождения числа num. Если такого числа в списке нет, то список не изменяется, при этом выводится сообщение "The number is missing". В результирующем списке порядок оставшихся элементов должен быть сохранен.
- Метод, который выводит элементы списка, где каждый элемент разделен символом точка с запятой (
;).
На проверку отправьте только сам класс.
| |
|
|
Режимы доступа - 3
Структуры
Задача на реализацию
Условный оператор
Объявите в программе класс WindowDlg, объекты которого предполагается создавать командой:
wnd = WindowDlg(заголовок окна, ширина, высота)
В каждом объекте класса WindowDlg должны создаваться приватные локальные атрибуты:
__title - заголовок окна (строка);
__width, __height - ширина и высота окна (числа).
В классе WindowDlg необходимо реализовать метод:
show() - для отображения окна на экране (выводит в консоль строку в формате: "<Заголовок>: <ширина>, <высота>", например "Диалог 1: 100, 50").
Также в классе WindowDlg необходимо реализовать два объекта-свойства:
width - для изменения и считывания ширины окна;
height - для изменения и считывания высоты окна.
При изменении размеров окна необходимо выполнять проверку:
- переданное значение является целым числом в диапазоне [0; 10000].
Если хотя бы один размер изменился (высота или ширина), то следует выполнить автоматическую перерисовку окна (вызвать метод show()). При начальной инициализации размеров width, height вызывать метод show() не нужно.
В программе нужно объявить только класс с требуемой функциональностью.
| |
|
|
Режимы доступа - 2
Задача на реализацию
Структуры
Объявите в программе класс Car, в котором реализуйте объект-свойство с именем model для записи и считывания информации о модели автомобиля из локальной приватной переменной __model.
Объект-свойство объявите с помощью декоратора @property. Также в объекте-свойстве model должны быть реализованы проверки:
- модель автомобиля - это строка;
- длина строки модели должна быть в диапазоне [2; 100].
Если проверка не проходит, то локальное свойство __model остается без изменений.
Объекты класса Car создаются командой:
car = Car()
и далее работа с объектом-свойством происходит следующим образом:
car.model = "Toyota"
Ваша задача написать ТОЛЬКО класс.
| |
|
|
Режимы доступа - 1
Задача на реализацию
Библиотеки Python
Задание 1.
Объявите класс с именем Clock и определите в нем следующие переменные и методы:
- приватная локальная переменная time для хранения текущего времени, целое число (своя для каждого объекта класса Clock с начальным значением 0);
- публичный метод set_time(tm) для установки текущего времени (присваивает значение tm приватному локальному свойству time, если метод check_time(tm) возвратил True);
- публичный метод get_time() для получения текущего времени из приватной локальной переменной time;
- приватный метод класса check_time(tm) для проверки корректности времени в переменной tm (возвращает True, если значение корректно и False - в противном случае).
Проверка корректности выполняется по критерию: tm должна быть целым числом, больше или равна нулю и меньше 100 000.
Объекты класса Clock создаются следующим образом :
clock = Clock(время)
Задание 2
Создайте объект clock класса Clock и установите время, равным 4530.
| |
|
|
Декодирование
Строки
Задача на реализацию
Дана таблица кодировки символов и некоторый код. Определите символ, которому этот код соответствует. Все коды представляют собой непустые последовательности из символов ‘0’ и ‘1’.
Входные данные
Сначала вводится число N – количество символов в кодовой таблице (целое, положительное, не превышает 10), затем вводится D – длина кода каждого символа (целое, положительное, не превышает 20).
Затем следует N строк в формате <символ><пробел><код>. В самом конце вводится код, который необходимо декодировать. Все символы являются заглавными латинскими буквами.
Выходные данные
Выведите символ, которому соответствует заданный код при такой кодировке или слово IMPOSSIBLE, если однозначное декодирование невозможно.
| |
|
|
Кеннинги
Задачи на моделирование
реализация
Задача на реализацию
Кеннинг – это форма поэтической метафоры в древности, когда одно слово заменяется словосочетанием (двумя или более словами). Например, “giver of the gold” – это кеннинг для слова “warrior”. Причем нет разницы в использовании слова и его кеннинга: “poor giver of the gold” и “poor warrior” – это одно и то же. Кеннинги могут быть вложенными. Так, “serpent’s lair” означает “gold”, поэтому “giver of the serpent’s lair” означает “warrior”.
Для зачета вам надо создать достаточно длинный текст. Это можно сделать быстро, имея план текста и список кеннингов. Будем использовать следующий алгоритм. Если текст уже достаточно длинный, то задание выполнено. В противном случае одновременно заменяем все слова в тексте, имеющие кеннинги на соответствующие кеннинги, затем алгоритм повторяется снова.
Входные данные
В первой строке входных данных содержатся 3 числа: ширина результирующего текста w (1≤w≤255), минимальное число непробельных символов в тексте l (1≤l≤3000) и число кеннингов в списке n (1≤n≤380). Далее следует список кеннингов, по одному в строке. Каждая строка сначала содержит заменяемое слово, а за ним следует соответствующее словосочетание. В конце входных данных в одной или нескольких строках содержится план текста.
Каждый кеннинг содержит по крайней мере 2 слова (т.е. одна строка содержит не менее трех слов). Кеннинги могут быть рекурсивными. Например, кеннинг для слова “GNU” может быть таким “GNU is Not UNIX”. Кеннинги чувствительны к грамматическим формам и даже к регистру букв, так слова “warrior”, “Warrior” и “warriors” различны и могут иметь разные кеннинги.
Входной файл не превосходит 3 000 байт и содержит только английские буквы, подчеркивания, пробелы, переводы строки и, в первой строке, цифры. Одно слово имеет только один кеннинг. Все слова состоят не более чем из w
символов.
Соседние слова разделены в точности одним пробелом или переводом строки. Ни в одной из строк нет ведущих или хвостовых пробелов.
Выходные данные
Если алгоритм не даст результата, то выведите слова “No result” в единственной строке.
В противном случае выведите полученный текст, размещая не более w символов (включая пробелы) в строке. Все переводы строки из первоначального плана должны быть сохранены. Перед очередным словом надо вставить перевод строки, если оно не уместиться в текущей строке. Соседние слова должны быть разделены ровно одним пробелом. В строках не должно быть ведущих и хвостовых пробелов. В корректном тексте не будет больше 10 000 байт.
| |
|
|
Счастливый билетик
Динамика по подмножествам
Задача на реализацию
Вывод формулы
В стране Лаккиландии очень развит общественный транспорт. Проезд в нем бесплатный, но при этом каждому пассажиру при входе выдают билетик с уникальным номером. Особенно ценятся так называемые счастливые билетики.
Билетик называется счастливым, если сумма цифр на четных позициях в его номере равна сумме цифр на нечетных позициях.
Ване известно, что билеты выдаются подряд в порядке возрастания номеров. В очередной раз войдя в автобус Ваня получил свой очередной билет и тут ему стало интересно, какой существует минимальный счастливый билетик с номером, большим номера Ваниного билетика. Помогите Ване узнать ответ на этот вопрос.
Входные данные
В единственной строке входного файла задан номер Ваниного билетика − натуральное число, имеющее в своей десятичной записи не более 100 цифр.
Выходные данные
В выходной файл выведите минимальный номер счастливого билетика, который больше номера Ваниного билетика.
| |
|
|
Billing
Линейные алгоритмы
Задача на реализацию
Девочка Катя подключилась к тарифу “Очень выгодный”, на котором можно только звонить. Все входящие звонки бесплатны. В случае исходящего звонка не более k1 первых секунд звонка стоят p1 копеек, и позвонить можно только если эти деньги на счету есть. За следующие k2 секунд Катя платит по p2 копеек за секунду, а все остальное время девочка платит по p3 копеек за секунду. Деньги снимаются мгновенно после каждой секуны. Как только баланс становится неположительным, связь обрывается. Известно, что Катя положила N копеек на счет, чтобы поговорить со своим лучшим другом. Причем, она хочет потратить все N копеек на этот один телефонный звонок. Посчитатйте, сколько максимально секунд Катя сможет наслаждаться беседой.
Входные данные
Во входном файле записаны через пробел 6 целых чисел: 0 ≤ N ≤ 1000000, 1≤ k1,k2 ≤ 1000000, 1 ≤ p1, p2, p3 ≤ 1000000.
Выходные данные
В выходной файл выведите одно число: максимальное количество секунд, которое при заданных условиях могла выговорить девочка Катя в течение одного телефонного разговора.
| |
|
|
Электронная таблица
Разбор выражений
поиск в глубину и подобное
Задача на реализацию
Напишите программу, выполняющую функции очень простой электронной таблицы. Она работает с таблицей из 9 строк от 1 до 9 и 26 столбцов от A до Z. Клетки таблицы обозначаются именами, составленными из кодов столбца и строки, например, B1, S8.
Каждая клетка содержит выражение. Выражения используют целые константы, ссылки на клетки, скобки, бинарные операторы +, -, * и / (целочисленное деление). Например, 567, E8/2, (3+B3)*(C4-1) являются правильными выражениями. Все операторы целочисленные. Деление на ноль даёт в результате ноль.
Если значение ячейки, на которую ссылается некоторое выражение, не определено, оно считается равным нулю. Ситуация, когда две или более ячейки зависят друг от друга, является отдельным случаем - циклической ссылкой.
Ограничения: длина выражения в одной ячейке до 255 символов, все аргументы и результаты меньше 1 000 000.
Входные данные
Первая строка содержит число выражений N. Следующие N строк имеют формат <Имя клетки>=<выражение>. Все выражения корректные, и каждая ячейка определена не более чем одним выражением.
Выходные данные
В единственной строке выводится или значение клетки A1, или число 1000000 (один миллион), если значение клетки A1 не может быть найдено из-за циклической ссылки.
| |
|
|
Статическая сложность
Вывод формулы
Разбор выражений
Задача на реализацию
Анализ временной сложности алгоритмов - важный инструмент создания эффективных программ. Алгоритмы, выполняемые за линейное время, как правило, значительно быстрее алгоритмов, требующих для выполнения той же задачи квадратичного времени, так что предпочтение должно быть отдано первым.
Обычно определяют время выполнения алгоритма по отношению к n - "размеру" входных данных. Это может быть число объектов, которые нужно отсортировать, число точек многоугольника и т.п. Поскольку определение формулы зависимости временной сложности алгоритма от n - непростая задача, было бы замечательно, если бы её можно было автоматизировать. К сожалению, в общем случае это невозможно. Но в этой задаче мы будем рассматривать программы очень простой природы, над которыми это можно проделать. Рассматриваемые программы записаны согласно следующим правилам БНФ, где <число> может быть любым неотрицательным целым числом:
- <Программа> ::= "BEGIN" <Список операторов> "END"
- <Список операторов> ::= <Оператор> | <Оператор> <Список операторов>
- <Оператор> ::= <Оператор LOOP> | <Оператор OP>
- <Оператор LOOP> ::= <Заголовок LOOP> <Список операторов> "END"
- <Заголовок LOOP> ::= "LOOP" <число> | "LOOP n"
- <Оператор OP> ::= "OP" <число>
Время выполнения такой программы может быть вычислено следующим образом: выполнение оператора OP требует столько единиц времени, сколько указано в его параметре. Список операторов, заключённый в оператор LOOP, выполняется столько раз, сколько указано в параметре оператора, то есть или заданное константное число раз, если задано число, или n раз, если параметром является n. Время выполнения списка операторов равно сумме времени выполнения его частей. Таким образом, время выполнения программы в целом зависит от n.
Входные данные
В первой строке находится целое число k - число программ во входном файле. Затем идут k программ, удовлетворяющих приведённой грамматике. Пробелы и переводы строк могут встречаться везде в программе, но не в ключевых словах BEGIN, END, LOOP и OP, нет их и в целых числах.
Выходные данные
Для каждой программы сначала идёт строка с номером программы. В следующей строке записывается время работы программы в терминах n - многочлен степени не более 10. Многочлен должен быть записан обычным способом, то есть подобные слагаемые должны быть приведены, слагаемое с большей степенью должно предшествовать слагаемому с меньшей степенью, слагаемые с коэффициентом 0 не записываются, множители 1 не записываются. Общий вид второй строки "Runtime = a*n^10+b*n^9+...+i*n^2+j*n+k". Если время выполнения нулевое, нужно вывести "Runtime = 0". За строкой с многочленом должна следовать пустая строка.
Ограничения: вложенность операторов LOOP не превышает 10, размер входного файла не более 2 Кбайт, коэффициенты многочлена в ответе не превышают 50 000.
| |
|
|
Сравнение URL
Задача на реализацию
Задачи на моделирование
Для идентификации ресурсов в сети Internet используются URL (Uniform Resource Locator). URL состоит из нескольких элементов: протокол, хост, порт, путь, файл и секция. Некоторые элементы URL могут быть опущены. Рассмотрим упрощенный формат URL:
[протокол://]хост[:порт][путь/[файл[#секция]]]
Заключенные в квадратные скобки элементы могут быть опущены, т.е. например, можно не указать протокол или секцию. Но, например, если указан файл, то обязательно должен быть указан путь. Регистр букв в элементах URL не важен.
Рассмотрим кратко все элементы URL:
*Протокол - это способ доступа к файлу, URL с разными протоколами и одинаковыми остальными элементами могут указывать на различные ресурсы.
*Хост и порт - это имя некоторого сервера в сети и способ доступа к нему (порт - натуральное число, не превосходящее 65535).
*Путь представляет собой путь к файлу, содержащему запрашиваемый ресурс, от некоторого каталога на сервере, который называется корневым. При этом для разделения имен каталогов используется символ "/". Путь, если он не пуст, всегда начинается с символа "/". Специальное обозначение '.' соответствует самому каталогу, '..' - родительскому каталогу.
*Файл - это файл, содержащий запрашиваемый ресурс.
Наконец, файл может быть разбит на секции каким либо способом и можно указать, к какой именно секции вы хотите обратиться.
Различные символы в URL могут быть заменены своими шестнадцатеричными ASCII кодами с помощью символа %, например a = %41, Z = %5A. В коде всегда используется ровно две шестнадцатеричные цифры.
Некоторые символы могут встречаться в элементах URL только как шестнадцатеричные коды - все символы, кроме букв латинского алфавита, цифр и символов "." и "-", а некоторые не могут встречаться вообще: "\", "#", "*", "@", "%", "?", ":", ",", а также символы с ASCII-кодом меньше %20. Символ "/" может встречаться в элементах URL только в пути для разделения входящих в него каталогов. Имя файла не может состоять только из точек.
Рассмотрим примеры URL:
http://neerc.ifmo.ru/school
ftp://somewhere.net:1234/pub/files/coolgame.zip
nobody.nowhere.net/some%20dir/some%20file#some%20info
Ваша цель в этой задаче - помочь разработчикам web-сервера. Для web-сервера отсутствующие части URL имеют следующие значения по умолчанию:
| Протокол |
http |
| Порт |
80 |
| Путь |
пустая строка |
| Файл |
index.html |
| Секция |
пустая строка |
Различные как строки URL могут указывать на один и тот же ресурс, например следующие три URL:
neerc.ifmo.ru
http://neerc.ifmo.ru:80/index.html#
Http://NEERC.IFMO.Ru/Dir/../././
Для разграничения доступа к ресурсам необходимо уметь определять, указывают ли два различных URL на один и тот же ресурс. Помогите разработчикам написать соответствующую проверку.
Входные данные
Входные данные состоят из двух строк, каждая из них содержит URL. Оба URL удовлетворяют формату, приведенному в условии этой задачи. Длина каждого URL не превосходит 200 символов. Гарантируется, что ни один из промежуточных каталогов на пути к ресурсу не лежит выше корневого каталога (т.е. не может встретиться, например, URL http://somewhere.com/../dir/index.html) а также, что имена всех каталогов состоят по крайней мере из одного символа (два символа "/" не могут идти подряд в любом месте, кроме как непосредственно после двоеточия после имени протокола).
Выходные данные
Выведите YES, если оба URL, приведенные во входных данных, указывают на один и тот же ресурс, и NO в противном случае.
| |
|
|
Джентльменский покер
Задача на реализацию
Задачи на моделирование
Наверняка все слышали про карточную игру "Покер". В джентльменском покере все, как и в обычном - игроки сидят за круглым столом, ставят ставки, повышают их, и кто-то в конце каждого раунда забирает выигрыш - банк. Только в джентльменском покере выигрыш раунда достается не одному игроку, а делится на K человек (K - степень щедрости). А точнее, банк делится поровну между победителем раунда и следующими K-1 игроками, сидящими за выигравшим (за последним сидит первый игрок). В случае, если сумма выигранного банка не делится поровну между K игроками, то излишек забирает победитель. Так, например, если играют 4 человека и степень щедрости равна 3, то при выигрыше первого игрока банк поделится между 1-ым, 2-ым и 3-им игроками, а при победе четвертого - между 4-ым, 1-ым и 2-ым. Ваша задача по протоколу игры сосчитать, сколько денег у каждого из игроков оказалось в конце игры. Т.к. покер джентльменский, то разрешается играть в долг.
Входные данные
В первой строке содержатся три положительных целых числа: N, K и S, где N - число игроков (игроки пронумерованы от 1 до N по направлению хода игры), K - степень щедрости и S - начальная сумма денег у каждого игрока, 2 <= N <= 30000, 1 <= K <= N, S <= 10500. Гарантируется, что долг игрока будет не менее, чем -215-1 и выигрыш не более, чем 215. Далее идут строки, описывающие протокол игры. Протокол игры состоит не более, чем из 210 событий. Возможные строки протокола игры:
BET A B - игрок под номером А добавляет в банк сумму B. В начале каждого раунда банк пуст.
WIN A - означает конец раунда и игрок под номером А забирает банк и делит его со следующими K-1 игроками.
END - означает конец игры. Данная строка является последней во входном файле.
Выходные данные
Вывести конечные суммы, которые оказались у игроков к концу игры. Первое число - сумма денег первого игрока, затем через пробел - сумма второго, и т.д. до последнего. Всего N чисел.
| |
|
|
Регистрация на web-сайте
Задача на реализацию
Входные данные
Вводятся три строки. В одной из строк вводится фамилия, состоящая только из латинских букв (строчных или заглавных). В другой строке вводится дата рождения. В оставшейся строке вводится номер банковской карточки.
Выходные данные
Программа должна вывести также три строки. В первой строке - фамилию, во второй - дату рождения, в третьей - номер банковской карточки.
Ограничения
Тестовые примеры, на которых проверяется решение, удовлетворяют следующим ограничениям.
Фамилия записывается латинскими строчными и заглавными буквами, длина фамилии не меньше трех символов и не больше 50.
Номер банковской карточки натуральное число, состоящее не менее, чем из 5, и не более, чем из 15 цифр.
Дата рождениязаписывается в формате ДД.ММ.ГГГГ (день и месяц вводятся ровно двумя цифрами каждый, год - ровно четырьмя)
| |
|
|
T2005
Бор
Задача на реализацию
Конечные автоматы
Клавиатура сотового телефона выглядит так:
| 1 — пробел |
2 — abc |
3 — def |
| 4 — ghi |
5 — jkl |
6 — mno |
| 7 — pqrs |
8 — tuv |
9 — wxyz |
Режим ввода T2005 устроен следующим образом. В телефоне есть словарь. Пользователь, чтобы ввести слово, последовательно нажимает клавиши, на которых написаны буквы этого слова. Например, чтобы ввести слово begin пользователь должен нажимать клавиши 23446. Но как только в словаре оказывается только одно слово с таким началом, это слово автоматически подставляется и, кроме того, после этого слова автоматически добавляется пробел. Например, пусть пользователь нажал клавиши 234, и оказалось, что слов, ввод которых начинается с нажатия именно этих клавиш, — ровно одно. Тогда автоматически подставится это слово и пробел после него, а все последующие нажатия клавиш уже будут относиться к вводу следующего слова.
Если для ввода какого-то слова нужно нажать последовательность клавиш, которая может являться началом какого-то другого слова, то после ввода этого слова нужно нажать клавишу 1, что соответствует вводу пробела. При вводе пробела считается, что вы ввели все слово целиком (а не только какое-либо его начало). Если после ввода пробела оказалось, что в словаре такой последовательности клавиш удовлетворяет несколько слов, подставляется первое из них в алфавитном порядке. Если (опять же после ввода пробела) оказалось, что в словаре нет слова, которое может быть введено такой последовательностью клавиш, то все, что было введено после предыдущего пробела (введенного или автоматически подставленного, или, если в тексте ранее не встречалось ни одного пробела — от начала текста) удаляется. Если после ввода пробела (как нажатием "1", так и автоподстановкой) или в начале текста нажимается клавиша "1", то ее нажатие игнорируется.
Вам дан словарь и последовательность нажатий клавиш. Выведите текст, который был введен пользователем.
Примечание: в тексте используются только маленькие латинские буквы и символ пробел.
Входные данные
Сначала на вход программы поступает число N — количество слов в словаре (2≤N≤100000). В следующих N строках задается словарь. Каждое слово записано в отдельной строке. Слова расположены в алфавитном порядке. Никакое слово в словаре не встречается дважды. Длина каждого слова не превосходит 10 символов.
Далее вводится число M — количество нажатий клавиш (1≤M≤20000). Затем задается M разделяющихся пробелами чисел, описывающих нажатые клавиши. Последней нажатой клавишей всегда является клавиша "1".
Выходные данные
Выведите одну строку — текст, который оказался введен пользователем. Пробел после последнего введенного слова также должен быть выведен.
Примечание:
2
a
z
2
5 1 |
Примечание: в этом примере выходной файл должен быть создан, но должен быть пустым, в частности, в него не нужно выводить пробел |
| |
|
|
Операнды - 2
Жадный алгоритм
Задача на реализацию
Алина выписала на доске \(n + 1\) цифру, каждая из которых от \(1\) до \(9\). Даша поставила между каждой парой соседних цифр знак одной из арифметических операций <<+>>, <<->>, <<*>> и <</>> (плюс, минус, умножить, целочисленное деление). Затем девочки отправились в столовую на обед.
Вернувшись, они обнаружили, что с доски все стерто, к счастью Даша смогла вспомнить, какие знаки и в каком порядке были расставлены. Также девочки считают, что результатом применения операций было небольшое число.
Они просят вас зная последовательность знаков, расставить цифры от \(1\) до \(9\) между ними так, чтобы итоговый результат был минимальным.
Формат входных данных
В первой строке входного файла дано число \(n\), число знаков, которые написала Даша (\(1 \le n \le 1000\)).
Во второй строке находится \(n\) знаков арифметических операций <<+>>, <<->>, <<*>> и <</>> (без кавычек).
Формат выходных данных
Выведите в единственной строке файла последовательность из \(n + 1\) цифры, таким образом, чтобы при расстановке между ними знаков итоговый результат был минимальным.
Если возможных решений несколько, разрешается вывести любое.
| |
|
|
Пара-тройка конфет
Вывод формулы
Задача на реализацию
У Алисы сегодня день рождения, и она хочет угостить своих одноклассников конфетами. В магазине, в который она успеет зайти перед школой, есть сладости двух видов: шоколадные и карамельные. Они продаются наборами по 3 штуки, причем в упаковке есть конфеты каждого из двух видов (то есть в одной упаковке лежат две конфеты одного вида и одна конфета другого вида). По внешнему виду упаковки нельзя понять, какие конфеты лежат внутри.
Чтобы никого не обидеть, всем в классе нужно раздать конфеты одного вида, а оставшиеся девочка заберёт домой. Алисе нужно собираться в школу, поэтому она попросила вас посчитать, какое минимальное число упаковок нужно купить, чтобы конфет хватило на всех.
Формат входных данных
В единственной строке задано число \(n\) (\(1 \le n \le 10 ^ 9\)) — количество человек в классе.
Формат выходных данных
Выведите единственное число — количество упаковок, которое должна купить Алиса.
Замечание
В первом примере Алиса купит две упаковки с конфетами. В первой упаковке лежат 2 конфеты одного вида, и 1 конфета другого вида. Если вторая упаковка будет такая же, как и первая, то у Алисы окажется 4 конфеты одного вида и 2 конфеты другого вида. Если вторая упаковка будет отличаться от первой, то у Алисы будет по 3 конфеты каждого вида. В любом случае у Алисы найдётся 3 конфеты одного вида.
Как видно из первого примера, для того, чтобы гарантированно получить 4 конфеты одного вида, недостаточно купить две упаковки.
| |
|
|
Чемпионат по устному счету
Задача на реализацию
Задачи на моделирование
Председатель жюри чемпионата по устному счету Иван Владимирович Треугольников придумал новое задание для участников чемпионата. Исходно на доске выписывается \(n\) целых чисел: \(a_1, a_2, \ldots, a_n\). После этого участник должен выполнять команды двух типов:
-
Стереть \(i\)-е число с доски и записать вместо него число \(x\). То есть, если на доске были записаны числа \(a_1, a_2, \ldots, a_n\), то после выполнения команды числа будут равны: \(a_1, \ldots, a_{i - 1}, x, a_{i + 1}, \ldots, a_n\).
-
Циклически сдвинуть последовательность чисел на \(k\) вправо. То есть, если на доске были записаны числа \(a_1, a_2, \ldots, a_n\), то после выполнения команды числа будут равны: \(a_{n - k + 1}, a_{n - k + 2}, \ldots, a_n, a_1, a_2, \ldots, a_{n - k}\).
После выполнения каждой команды участник должен вычислить сумму всех чисел, записанных на доске, и сообщить ее жюри. Чтобы подготовиться проверять ответы участников, членам жюри необходимо самим вычислить требуемые суммы.
Формат входных данных
В первой строке записано целое число \(n\) — количество чисел, изначально записанных на доске (\(2 \leq n \leq 10^5\)).
Во второй строке через пробел записаны \(n\) целых чисел: \(a_1, a_2, \ldots, a_n\) — числа, изначально выписанные на доске (\(-10^9 \leq a_i \leq 10^9\)).
В третьей строке записано целое число \(q\) — количество команд, которые необходимо выполнить (\(1 \leq q \leq 10^5\)).
В каждой из следующих \(q\) строк записана очередная команда в следующем формате:
-
\(1~i~x\) — это означает, что участник должен заменить \(i\)-е число последовательности на число \(x\) (\(1 \leq i \leq n\); \(-10^9 \leq x \leq 10^9\)).
-
\(2~k\) — это означает, что участник должен циклически сдвинуть последовательность чисел на \(k\) вправо (\(1 \leq k < n\)).
Формат выходных данных
В качестве ответа выведите \(q\) строк, в каждой из которых записано одно целое число.
В \(i\)-й строке должна быть записана сумма чисел на доске после выполнения первых \(i\) команд.
Обратите внимание, что ответ может быть достаточно большим и для его хранения потребуется 64-битный тип данных, int64 в паскале, long long в C++, long в Java.
Замечание
Рассмотрим пример из условия. Изначально последовательность записанных на доске чисел равна: \(4,~1,~2,~1,~5,~3\).
После первой команды последовательность циклически сдвигается на \(3\) элемента вправо. Новая последовательность: \(1,~5,~3,~4,~1,~2\). Сумма чисел равна: \(1 + 5 + 3 + 4 + 1 + 2 = 16\).
После второй команды необходимо заменить третий элемент последовательности на число \(10\). Новая последовательность: \(1,~5,~10,~4,~1,~2\). Сумма чисел равна: \(1 + 5 + 10 + 4 + 1 + 2 = 23\).
После третьей команды заменить четвертый элемент на число \(4\). Так как четвертый элемент уже равен \(4\), последовательность не изменяется. Сумма чисел также равна \(23\).
После четвертой команды последовательность циклически сдвигается на \(1\): \(2,~1,~5,~10,~4,~1\). Сумма чисел не изменилась.
Наконец, после пятой команды последовательность становится равна: \(-10,~1,~5,~10,~4,~1\). Сумма чисел в итоговой последовательности равна \(-10 + 1 + 5 + 10 + 4 + 1 = 11\).
| |
|
|
1
Элементарная геометрия
Задача на реализацию
Прямоугольник ABCD задан координатами своих вершин. На противоположных сторонах AB и CD заданы последовательности R1 и R2 из N точек разбиения, а на сторонах BC и AD - R3 и R4 из M точек разбиения. Нумерация элементов последовательностей R1 и R2 начинается соответственно от точек A и D, а R3 и R4 - от точек B и A. Соединив отрезками точки с одинаковыми номерами в разбиениях R1 и R2, а затем в разбиениях R3 и R4, получим разбиение Q прямоугольника ABCD на множество четырехугольников.
Построить алгоритм, определяющий четырехугольник разбиения Q с наибольшей площадью, при условии, что отрезки, соединяющие точки разбиений R1 и R2 параллельны стороне AD.
Последовательности R1, R2, R3 и R4 задаются как массивы из длин отрезков разбиения соответствующих сторон прямоугольника.
| |
|
|
Баскетбол
Задачи на моделирование
Задача на реализацию
На физкультуре школьники 10-А класса играют в баскетбол. В классе учится \(n\) школьников, которые построились в ряд. Учитель физкультуры разделил их на две команды следующим образом: в первую команду пошли школьники, которые стоят на нечетных местах: первом, третьем, пятом, и т. д. Школьники, которые стоят на четных местах: втором, четвертом, шестом, и т. д. составили вторую команду.
От каждой команды на поле постоянно находятся \(p\) школьников. Исходно от каждой команды на поле вышли \(p\) школьников, которые стояли раньше в исходном построении. Чтобы все школьники поиграли, каждую минуту учитель делает замены в обеих командах.
Игрок, которые провел на поле больше всего минут к этому моменту (не обязательно подряд) отправляется на скамейку запасных. Если таких игроков несколько, отдыхать идет игрок с максимальным номером в исходном построении.
Запасной же игрок, которые провел к этому моменту на поле меньше всего минут, выходит на поле. Если таких игроков несколько, на поле выходит игрок с минимальным номером в исходном построении.
Учителя заинтересовал вопрос, кто же будет на поле после \(m\)-й смены игроков. Помогите ему выяснить это.
Например, пусть исходно шесть учеников построились в следующем порядке: Иванов, Петров, Сидоров, Андреев, Казаков, Сергеев. Команды будут сформированы следующим образом. Первая команда: Иванов, Сидоров, Казаков. Вторая команда: Петров, Андреев, Сергеев. Пусть на поле одновременно находятся 2 игрока, тогда исходно на поле выйдут Иванов и Сидоров от первой команды, Петров и Андреев от второй.
После первой минуты игры Сидоров и Андреев пойдут на скамейку запасных, а на поле появятся Казаков и Сергеев. После второй минуты отдыхать пойдут Иванов и Петров, а Сидоров и Андреев вернутся на поле. Наконец, после третьей минуты Казаков и Сергеев снова пойдут отдыхать, а на площадке появятся Сидоров и Андреев. Таким образом после трех смен на поле будут (в алфавитном порядке) Андреев, Иванов, Петров и Сидоров.
Формат входных данных
Первая строка содержит три целых числа: \(n\), \(m\) и \(p\) (\(2p \le n \le 50\), \(1 \le p \le 10\), \(0 \le m \le 100\)). Следующие с \(n\) строк содержат по одной фамилии — игроки в том порядке, в котором они исходно построились Каждая фамилия представляет собой непустую последовательность букв латинского алфавита не длиннее 50. Все фамилии различны.
Формат выходных данных
Выведите в алфавитном порядке фамилии игроков, которые будут на поле после \(m\) смен составов. Разделяйте фамилии пробелом.
| |
|
|
Подтасовка результатов
Задача на реализацию
Разбор случаев
В городе Н. олимпиада по информатике состоит из двух туров, каждый из которых оценивается из 400 баллов. Для удобства все её участники занумерованы числами от 1 до \(N\).
Сразу после проведения олимпиады курьер принёс жюри пренеприятнейшее известие: <<сверху>> пришло указание о том, что некто Вася, выступавший в олимпиаде под номером 1, должен занять как можно более высокое место, то есть как можно меньше участников должны набрать по сумме двух туров больше баллов, чем Вася. При этом места, занятые школьниками в каждом из туров в отдельности, уже опубликованы, и их менять нельзя. Для каждого тура дан список номеров участников в порядке занятого места — перестановка чисел от 1 до \(N\). Теперь работа жюри заключается в том, чтобы расставить целые баллы от 1 до 400 каждому участнику в первом и втором турах таким образом, чтобы в итоговой таблице Вася занял как можно более высокое место, а места участников в каждом из туров не изменились. При этом никакие два участника не должны получить в одном туре одинаковые баллы.
Ваша задача — проделать за жюри такую работу.
Считается, что участник по сумме двух туров занял место \(A\), если ровно \(A-1\) участников набрали по сумме двух туров строго больше баллов.
Формат входных данных
Сначала вводится целое число \(N\) (\(1 \le N \le 200\)) — количество участников олимпиады. Во второй строке перечислены номера участников в порядке занятых мест в первом туре (от первого места до \(N\)-го). В третьей строке в таком же формате следует описание второго тура. Номера участников во второй и третьей строках разделены пробелами.
Формат выходных данных
Сначала выведите \(N\) целых чисел от 1 до 400, соответствующих расстановке баллов участникам первого тура, где \(i\)-ое число — балл в первом туре участника, занявшего на нём \(i\)-е место, затем аналогично \(N\) целых чисел, соответствующих расстановке баллов во втором туре. Числа разделяйте пробелами или переводами строки. Никакие два участника не должны получить одинаковые баллы в одном и том же туре. Если существует несколько способов расставить баллы требуемым образом, выведите любой из них.
Примечание
Во втором примере первый участник займет второе место, разделив баллы со вторым и уступив третьему. Можно было бы сделать и так, чтобы второй участник выступил хуже первого, но место первого от этого не изменится.
| |
|
|
Стековое кодирование
Стек
Задача на реализацию
Задачи на моделирование
Если увлечься темой кодирования информации, можно поймать себя на придумывании совершенно неожиданных алгоритмов. Сегодня вам предстоит разобраться в кодировании массива стеком.
Изначально вам дан пустой стек и пустой массив. Кодом массива \(a\) назовем последовательность действий вида
-
\(\mathtt{push}(x)\) — положить число \(x\) на вершину стека;
-
\(\mathtt{pop}\) — снять число с вершины стека;
-
\(\mathtt{print}\) — выписать в конец массива все элементы стека по порядку от нижнего к верхнему,
приводящую к тому, что в изначально пустой массив оказываются выписаны все элементы \(a\) по порядку. При выполнении третьей операции стек не очищается.
Например, при выполнении последовательности действий \(\mathtt{push}(1)\), \(\mathtt{push}(2)\), \(\mathtt{print}\), \(\mathtt{print}\), \(\mathtt{pop}\) и \(\mathtt{print}\) в массив оказываются выписаны числа \([1, 2, 1, 2, 1]\), а на стеке остается лежать только число \(1\). То есть такая последовательность является кодом массива \([1, 2, 1, 2, 1]\) длины \(6\).
Вам дан массив \(a\) и \(q\) запросов: какой у отрезка массива \(a\) с \(l_i\)-го по \(r_i\)-й элемент включительно минимальный по количеству действий со стеком код?
Найдите для каждого запроса код соответствующего отрезка массива. Не требуется найти код наименьшей возможной длины, но чем меньше найденный код, тем больше баллов получит ваше решение.
Формат входных данных
В первой строке ввода даны четыре целых числа \(n\) и \(q\) — длина массива \(a\), про отрезки которого спрашивается в запросах, количество запросов, а также максимальный балл за тест и параметр \(\gamma\), указанный в системе оценивания, которые ваше решение может игнорировать \((1 \le n \le 2000\); \(1 \le q \le 10^4\)).
Во второй строке перечислены \(n\) целых чисел \(a_i\) — элементы массива \(a\) (\(1 \le a_i \le 10^9\)).
В \(i\)-й из следующих \(q\) строк даны два целых числа \(l_i\) и \(r_i\) — границы отрезка из \(i\)-го запроса (\(1 \le l_i \le r_i \le n\)).
Формат выходных данных
Для каждого запроса выведите в отдельной строке целое число \(k\) от \(1\) до \(n + 1\) — количество действий в вашем коде соответствующего отрезка массива, после чего в следующей строке выведите через пробел \(k\) целых чисел, описывающих эти действия в порядке их выполнения:
-
для действия \(\mathtt{push}(x)\) выведите число \(x\) от \(1\) до \(10^9\);
-
для действия \(\mathtt{pop}\) выведите число \(-1\);
-
для действия \(\mathtt{print}\) выведите число \(0\).
Если в результате выполнения выведенных действий происходит попытка снять число с вершины пустого стека или в конце не получается массив, равный заданному отрезку массива \(a\), ваше решение получает вердикт Wrong Answer. Также вы получите вердикт Wrong Answer, если в вашем коде будет больше \(n + 1\) действия.
| |
|
|
Разноцветные диагонали
Задача на реализацию
Вывод формулы
Миша увлекается компьютерной графикой. Он хочет нарисовать на экране квадрат размером \(n\times n\) пикселей разными цветами.
Монитор Миши поддерживает 26 цветов. Для обозначения цветов будем использовать строчные буквы латинского алфавита от <<a>> до <<z>>. Миша хочет нарисовать каждый пиксель некоторым цветом, который зависит от расстояния от пикселя до ближайшей диагонали.
А именно, клетки на диагоналях квадрата он хочет нарисовать цветом <<a>>, соседние с ними клетки — цветом <<b>>, соседние с ними, но еще не покрашенные — цветом <<c>>, и так далее. После цвета <<z>> Миша снова переходит к цвету <<a>>.
По заданному \(n\) выведите картинку, которая получится у Миши.
Формат входных данных
Входные данные содержат одно целое число \(n\) (\(1 \le n \le 100\)).
Формат выходных данных
Выведите \(n\) строк по \(n\) символов — картинку, которая получится у Миши.
| |
|
|
Ремонт кладовки
Разбор случаев
Задача на реализацию
Дима купил кладовку размера \(X\times Y \times Z\), где \(X, Y, Z\) — это длина, ширина и высота в метрах соответственно. Но она оказалась без окон, без дверей и с голыми стенами. В магазине продается два типа обоев. В наличии имеется \(S_1\) квадратных метров обоев первого типа, стоимостью \(C_1\) рублей за квадратный метр, а второго типа — \(S_2\) квадратных метров стоимостью \(C_2\) рублей за квадратный метр.
Дима хочет сделать дверь размера \(A \times B\), где \(A\) — ширина, а \(B\) — высота, в одной из стен (обои на дверь клеить не надо). Также он хочет, чтобы на стенах, расположенных друг напротив друга, были наклеены одинаковые обои. То есть обе стены размером \(X \times Z\) должны быть оклеены одним типом обоев. Аналогично, обе стены размером \(Y \times Z\) также должны быть оклеены одним типом обоев. Определите, получится ли у него поклеить обои, и если получится, то какая минимальная сумма в рублях ему потребуется.
Формат входных данных
В первой строке вводится три целых числа \(X\), \(Y\) и \(Z\) (\(1 \leq X, Y, Z \leq 10\,000\)) — длина, ширина и высота комнаты.
Во второй строке вводится четыре целых числа \(S_1\), \(C_1\), \(S_2\) и \(C_2\) (\(1 \leq S_1, C_1, S_2, C_2 \leq 10^{8}\)) — количество квадратных метров обоев первого типа на складе, стоимость квадратного метра обоев первого типа, количество квадратных метров обоев второго типа и стоимость квадратного метра обоев второго типа.
В третьей строке вводится два числа \(A\) и \(B\) (\(1 \leq A, B \leq 10\,000\)) — ширина и высота двери.
Формат выходных данных
Определите, сможет ли Дима оклеить кладовку обоями. Если это невозможно, то выведите -1. Иначе выведите минимальную сумму в рублях, которую Дима потратит на покупку обоев.
Решения, верно работающие при \(X=Y=Z\), будут оцениваться не менее чем в 30 баллов.
Примечание
В первом примере Дима установит дверь в стену размером \(5 \times 10\) и наклеит первый вид обоев на все стены.
Во втором примере Дима установит дверь в стену \(5 \times 10\), наклеит первый вид обоев на стены \(6 \times 10\) и второй вид обоев на стены \(5 \times 10\).
В третьем примере высота двери слишком большая.
В четвертом примере суммарная площадь доступных обоев меньше, чем площадь стен.
| |
|
|
Звездочки
Цикл for
Условный оператор
Задача на реализацию
Коля любит рисовать картинки из звездочек. Сегодня он решил вывести \(n\) строк, \(k\)-я из которых должна содержать \(k^2\) звездочек.
Но потом Коля понял, что выводить слишком много звездочек плохо. Поэтому он решил, что если в очередной строке надо вывести больше \(100\) звездочек, то он выведет в этой строке только \(100\) звездочек, а затем выведет три точки.
Помогите Коле реализовать его план.
Формат входных данных
На вход подается одно целое число \(n\) (\(1 \le n \le 100\)).
Формат выходных данных
Выведите \(n\) строк в соответствии с планом Коли. Не выводите пробелы.
| |
|
|
Пути Дика
Алгоритмы обработки
Задача на реализацию
Одной из визуализаций правильных скобочных последовательностей являются пути Дика. Путь Дика — путь на клетчатой плоскости, составленный из диагональных отрезков, соединяющих противоположные углы единичных квадратов. Путь начинается из начала координат, открывающейся скобке соответствует отрезок, поднимающийся вправо вверх, а закрывающиейся — спускающийся вправо вниз. На рисунке показан путь Дика для скобочной последовательности <<(())()>>.

Требуется написать программу, которая изображает путь Дика для заданной правильной скобочной последовательности с использованием символов <<.>> (ASCII 46) для пустых единичных квадратов, <</>> (ASCII 47) для единичных квадратов, содержащих отрезок, поднимающийся вверх, и <<‘
>> (ASCII 97) для единичных квадратов, содержащих отрезок, спускающийся вниз.
Напомним, что правильная скобочная последовательность — последовательность открывающихся и закрывающихся круглых скобок, получающаяся из некоторого корректного арифметического выражения удалением из него всего, кроме скобок. Иначе говоря, это последовательность, содержающая равное число открывающихся и закрывающихся скобок, при этом любой префикс этой последовательности содержит не меньше открывающихся скобок, чем закрывающихся.
Формат входных данных
На ввод подается правильная скобочная последовательность. Она непуста и имеет длину не более \(100\) символов.
Формат выходных данных
Требуется вывести изображение пути Дика для заданной во вводе правильной скобочной последовательности. Количество выведенных строк должно быть минимальным возможным. Все строки должны иметь одинаковую длину. Эта длина должна быть минимальной возможной для данного ввода.
| |
|
|
Новое слово
Пересечение множеств
Задача на реализацию
В информатике иногда образуют новые слова, взяв начало одного слова и конец другого. Например, из слов <<tree>> и <<heap>> образовано слово <<treap>>.
Дано слово \(s\) и слово \(t\). Сколько различных слов можно образовать, добавив к непустому началу слова \(s\) непустой конец слова \(t\)?
Формат входных данных
Первая строка входных данных содержит слово \(s\).
Вторая строка входных данных содержит слово \(t\).
Каждое из слов непусто и состоит из строчных латинских букв. Длина каждого из слов не превышает \(100\,000\).
Формат входных данных
Выведите одно целое число — количество различных слов, которые можно образовать, добавив к непустому началу слова \(s\) непустой конец слова \(t\).
| |
|
|
Конфеты для первоклассников
Вывод формулы
Задача на реализацию
Старшеклассники Андрей и Аня планируют прийти на празднование 1 сентября у первоклассников. Они решили принести конфеты, чтобы раздать ребятам. Им известно, что на празднике будет \(n\) первоклассников. Каждый из старшеклассников готов купить от \(a\) до \(b\) конфет, включительно. Они хотели бы купить в сумме такое число конфет, чтобы их можно было поделить между всеми первоклассниками поровну. Если же такое число конфет купить не получается, то они хотят, чтобы после деления поровну между первоклассниками осталось как можно меньше конфет.
Если есть несколько способов выбрать, сколько конфет купят Андрей и Аня, они решили выбрать такой способ, в котором Андрей купит как можно больше конфет. А если по прежнему есть несколько способов, то чтобы Аня купила как можно больше конфет. Помогите Андрею и Ане понять, сколько конфет нужно купить каждому из них.
Формат входных данных
На ввод подаются три натуральных числа, по одному на строке: \(n\) — число первоклассников, \(a\) и \(b\) — минимальное и максимальное число конфет, которое согласен купить каждый из старшеклассников (\(1 \le n \le 10^9\), \(1 \le a \le b \le 10^9\)).
Формат выходных данных
Выведите два целых числа \(x\) и \(y\) — число конфет, которые купят Андрей и Аня, соответственно.
| |
|
|
Дивизионы
Задача на реализацию
Условный оператор
Миша планирует сделать новый сайт для проведения олимпиад по информатике. Он планирует проводить соревнования в трех дивизионах, чем меньше номер дивизиона, тем задачи в нем труднее.
Для того, чтобы определить, какой участник может участвовать в каком дивизионе, планируется использовать рейтинг. Рейтинг каждого участника — целое число от \(0\) до \(5000\).
Для каждого участника, в зависимости от его рейтинга, определен его базовый дивизион.
-
Участники с рейтингом от \(0\) до \(1600\) имеют в качестве базового дивизиона третий.
-
Участники с рейтингом от \(1601\) до \(1900\) имеют в качестве базового дивизиона второй.
-
Участники с рейтингом более \(1900\) имеют в качестве базового дивизиона первый.
Каждое соревнование может проходить в одном или более дивизионах. Каждый участник участвует ровно в одном дивизионе.
-
Если соревнование проводится в базовом дивизионе участника, он участвует в своем дивизионе.
-
Иначе участник может выбрать, в каком из доступных дивизионов он будет участвовать.
-
При этом если рейтинг участника выше, чем рейтинг всех участников, для которых базовым является дивизион, в котором он участвует, он участвует вне конкурса.
По рейтингу участников и списку дивизионов, в котором проводится соревнование, определите, в каких дивизионах он сможет участвовать, и с каким статусом.
Формат входных данных
Первая строка ввода содержит целое число \(r\) "— рейтинг участника (\(0 \le r \le 5000\)).
Вторая строка ввода содержит от одного до трех различных символов. Каждый из этих символов равен 1, 2 или 3. Символы, которые встречаются во второй строке, показывают, в каких дивизионах проводится соревнование. Дивизионы перечислены в порядке возрастания номера, без пробелов.
Формат выходных данных
Выведите одну или более строк. Для каждого дивизиона, в котором участник сможет поучаствовать, выведите номер этого дивизиона. Если участник может принять участие в этом дивизионе только вне конкурса, выведите после номера дивизиона символ <<*>> (звездочка). Выводите дивизионы в порядке возрастания номера.
В этой задаче 35 тестов, каждый тест оценивается независимо, некоторые тесты оцениваются в 2, а некоторые в 3 балла.
В первом примере участник с первым базовым дивизионом должен участвовать в своем дивизионе.
Во втором примере участник со вторым базовым дивизионом может участвовать и в первом и в третьем дивизионе, но в третьем дивизионе его участие будет вне конкурса.
| |
|
|
Лестница из чисел
Вывод формулы
Задача на реализацию
Валентин выписывает натуральные числа, начиная с 1, в виде лестницы: на первой строке он пишет одно число, на второй — два, на третьей — три, и так далее.
1
2 3
4 5 6
7 8 9 10
...
После этого он стирает все числа на каждой строке, кроме первых \(k\). Если в строке меньше \(k\) чисел, он оставляет их все.
Заданы целые числа \(a\) и \(b\), а также число \(k\). Выведите строки с \(a\)-й по \(b\)-ю, которые получились у Валентина.
Формат входных данных
На ввод подаются три строки: первая содержит число \(a\), вторая содержит число \(b\), третья содержит число \(k\) (\(1 \le a \le b \le 10^9\), \(b - a \le 100\), \(1 \le k \le 100\)).
Формат выходных данных
Выведите строки с \(a\)-й по \(b\)-ю, которые получились у Валентина. Числа в строках разделяйте пробелами.
| |
|
|
Пары, свободные от квадратов
Простые числа и разложение на множители
Задача на реализацию
Целое число \(x\) называется свободным от квадратов, если нет такого целого числа \(y > 1\), что \(x\) делится на \(y^2\), то есть \(x = y^2z\) для некоторого целого \(z\).
Даны числа \(l\) и \(r\). Требуется найти число пар целых чисел \((a, b)\), таких что \(l \le a < b \le r\), и числа \(a\), \(b\), а также их произведение \(ab\) свободны от квадратов.
Формат входных данных
На вход подается две строки, первая содержит целое число \(l\), а вторая "— целое число \(r\) (\(1 \le l < r \le 10^9\), \(r - l \le 1000\)).
Формат выходных данных
Выведите одно целое число — искомое число пар.
Примечание
В примере подходят пары \(a = 3, b = 5\), \(a = 5, b = 6\). Число \(4\) не может входить в пару, так как \(4 = 2^2\cdot 1\), а пара \(a = 3, b = 6\) не подходит, так как \(ab = 3\cdot 6 = 18 = 3^2\cdot 2\).
| |
|
|
Класс
Вывод формулы
Задача на реализацию
В классе, в котором ведет уроки географии Иван Петрович, \(n\) мальчиков и \(m\) девочек. Иван Петрович рассаживает учеников по по два человека за парту, кроме, возможно, одной парты, за которую приходится посадить одного ученика, если число учеников нечётно.
Иван Петрович заметил, что если за одной партой сидят два мальчика или две девочки, они отвлекаются во время урока. А если за одной партой сидят мальчик и девочка, или за партой сидит один ученик, то они слушают урок внимательно.
Помогите Ивану Петровичу выяснить, какое максимальное число учеников может внимательно слушать урок, если он правильно рассадит их за парты.
Формат входных данных
Первая строка ввода содержит целое число \(n\) (\(0 \le n \le 30\)).
Вторая строка ввода содержит целое число \(m\) (\(0 \le m \le 30\)).
Формат выходных данных
Выведите одно целое число: максимальное количество учеников, которые могут внимательно слушать урок.
Примечание
В примере Иван Петрович может посадить за 3 парты мальчика и девочку, и за четвертую парту двух мальчиков, тогда 6 учеников будут внимательно слушать урок.
| |
|
|
Выбор дистанции
"Два указателя"
Префиксные суммы(минимумы, ...)
Задача на реализацию
Физрук формирует дистанцию для забега школьников на уроке. Согласно требованиям, длина дистанции должна быть от \(L\) до \(R\) метров.
Дистанция пройдет вдоль дорожки в парке около школы. Вдоль дорожки растет \(n\) деревьев, первое дерево находится на расстоянии \(d_1\) метров от начала дорожки, \(i\)-е дерево находится на расстоянии \(d_i\) метров от предыдущего дерева для \(i > 1\). Для удобства физрук хочет, чтобы дистанция начиналась либо в начале дорожки, либо около какого-либо дерева, и заканчивалась также около какого-либо дерева.
Если подходящих вариантов организовать дистанцию несколько, физрук хочет выбрать из них тот, в котором финиш находится как можно ближе к началу дорожки. Если подходящих вариантов все еще несколько, он хочет выбрать тот, где старт находится как можно ближе к началу дорожки.
Помогите физруку выбрать точки начала и конца дистанции.
Формат входных данных
Первая строка ввода содержат два целых числа \(L\) и \(R\) (\(1 \le L \le R \le 3 \cdot 10^{14}\)). Обратите внимание, что для считывания \(L\) и \(R\) необходимо хотя бы 64-битный тип данных (<<long long>> в C++).
Вторая строка ввода содержит целое число \(n\) (\(1 \le n \le 300\,000\)).
Третья строка ввода содержит \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) (\(1 \le d_i \le 10^9\)).
Формат выходных данных
Выведите два целых числа: \(s\) и \(t\) — расстояние от начала дорожки до начала и конца дистанции, соответственно. Должны выполняться условия: \(0 \le s < t\), \(L \le t - s \le R\), \(s = 0\) или \(s\) совпадает с позицией некоторого дерева, \(t\) совпадает с позицией некоторого дерева.
Если выбрать организовать дистанцию не получится, выведите \(s = -1\), \(t = -1\).
| |
|
|
50100
Логика
Задача на реализацию
Карта Карно - графический способ представления логической функции, составляемый для формирования минимизированной функции в аналитическом виде.
Для логической функции от четырёх переменных f(a, b, c, d) карта составляется следующим образом:
ab
cd |
00 |
01 |
11 |
10 |
| 00 |
f(0,0,0,0) |
f(0,0,0,1) |
f(0,0,1,1) |
f(0,0,1,0) |
| 01 |
f(0,1,0,0) |
f(0,1,0,1) |
f(0,1,1,1) |
f(0,1,1,0) |
| 11 |
f(1,1,0,0) |
f(1,1,0,1) |
f(1,1,1,1) |
f(1,1,1,0) |
| 10 |
f(1,0,0,0) |
f(1,0,0,1) |
f(1,0,1,1) |
f(1,0,1,0) |
После составления карты в ней выделяют "склейки" - прямоугольные области, удовлетворяющие
двум условиям:
- все значения истинны;
- размер области равен 2n, где n - любое натуральное число.
При этом считают, что первый и последний столбец, а также первая и последняя строки расположены "рядом", то есть в них также можно формировать склейки.
Цель формирования склеек - выделить как можно меньшее их число, для этого склейки должны иметь наибольший размер и могут накладываться друг на друга.
Для логической функции от четырёх переменных требуется составить карту Карно, в которой указать разными цифрами формируемые склейки: самые большие для этой функции (по 8 элементов) - цифрой 4, следующие по размеру (по 4 элемента) - цифрой 3, и т.д.
Входные данные
16 строк, составляющие полную таблицу истинности функции. В каждой строке через пробел записаны значения переменных a, b, c, d и значение функции f в виде нулей и единиц (0 - значение ложно, 1 - значение истинно).
Выходные данные
матрица из 4 строк по 4 цифры, записанных через пробел и соответствующих искомым значениям. Цифры могут принимать значения от 0 до 4.
Примеры
| № |
Входные данные |
Выходные данные |
Примечание |
| 1 |
0 0 0 0 0
0 0 0 1 1
0 0 1 0 0
0 0 1 1 1
0 1 0 0 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 1
1 0 0 0 0
1 0 0 1 1
1 0 1 0 1
1 0 1 1 1
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0 |
0 3 3 0
3 3 3 3
0 0 0 0
0 3 3 2 |
Для заданной функции выделяются склейки во 2-й строке и
в квадрате в первой и последней строках по 4 элемента
(обозначены цифрой 3), а также склейка из двух элементов
в конце 4-й строки. Поскольку она накладывается на
предыдущую склейку, то только второй элемент в ней
обозначен цифрой 2. |
| 2 |
0 0 0 0 1
0 0 0 1 1
0 0 1 0 0
0 0 1 1 0
0 1 0 0 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 1
1 0 0 0 0
1 0 0 1 0
1 0 1 0 0
1 0 1 1 0
1 1 0 0 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 1 |
3 3 0 0
4 4 4 4
4 4 4 4
0 0 0 0 |
Для данной функции выделяется склейка во 2-й и 3-й
строках, она состоит из 8 элементов и обозначается
цифрой 4. Также выделяется квадрат из 4-х элементов
(первые 2 в 1-й и 2-й строках), он накладывается на
большую склейку, поэтому только его половина отмечена
цифрой 3. |
| |
|
|
Перекладывание ответственности
Задачи на моделирование
Задача на реализацию
При подготовке олимпиад у каждого разработчика есть своя зона ответственности. Обычно каждый разработчик полностью отвечает за подготовку какой-то определенной задачи, однако в этот раз жюри ИОИП решило поступить по-другому.
Всего в команде разработчиков \(n\) человек. Также есть \(n\) задач, которые необходимо подготовить. Подготовка \(i\)-й задачи требует подготовки ровно \(c_i\) ее элементов, и разработка каждого элемента \(i\)-й задачи имеет сложность \(w_i\).
Было решено, что каждый разработчик будет отвечать за столько же элементов, за сколько он бы отвечал, если бы разрабатывал целиком соответствующую задачу. Иными словами, \(i\)-му разработчику будет назначено ровно \(c_i\) элементов из различных задач. Распределение элементов по разработчикам происходит следующим образом:
-
Сначала первому разработчику выдается \(c_1\) элементов, затем второму — \(c_2\), и так далее. Переход к \((i+1)\)-му разработчику происходит в тот момент, когда \(i\)-му назначается ровно \(c_i\) элементов.
-
Элементы, за которые будет отвечать каждый разработчик, выбираются по одному из всех еще не до конца распределенных задач по очереди. Сначала будет выбран один этап из первой задачи, затем — из второй, из третьей, и так далее по кругу. Если в какой-то задаче не осталось нераспределенных этапов, она пропускается.
-
Элементы, назначаемые очередному разработчику, выбираются начиная с той задачи, на которой остановился предыдущий разработчик. То есть, если последний элемент, назначенный предыдущему разработчику, был из \(x\)-й задачи, то первый элемент, назначенный следующему, будет из задачи \((x+1) \bmod n\) (если в ней еще остались нераспределенные элементы).
Иными словами, поддерживается набор еще не до конца распределенных задач и указатель \(x\) на <<текущую>> задачу. Когда надо выдать текущему разработчику очередной элемент, ему выдается один элемент из задачи \(x\), после чего \(x\) сдвигается по кругу вперед на следующую задачу.
Жюри считает, что такой способ позволяет более честно распределить сложность подготовки олимпиады. Определите суммарную сложность разработки элементов, доставшихся каждому из \(n\) разработчиков.
Формат входных данных
В первой строке дано целое число \(n\) — количество разработчиков (\(1 \le n \le 500\,000\)).
В \(i\)-й из следующих \(n\) строк через пробел даны два целых числа \(c_i\) и \(w_i\) — количество элементов в \(i\)-й задаче и сложность их разработки (\(1 \le c_i, w_i \le 10^9\)).
Формат выходных данных
В единственной строке выведите через пробел \(n\) чисел, \(i\)-е из которых равно суммарной сложности разработки элементов, доставшихся \(i\)-му разработчику.
Замечание
Иллюстрацию к третьему примеру можно видеть ниже. Слева показаны элементы, из которых состоят задачи, справа — элементы, назначенные каждому разработчику.
В центре каждого элемента указана сложность его реализации, а число в левом верхнем углу обозначает порядок выбора элементов. Элементы выбираются из задач в порядке слева-направо, затем снизу-вверх, а назначаются в порядке снизу-вверх, затем слева-направо.

| |
|
|
Биржа - 2
Задача на реализацию
Задачи на моделирование
В данной задаче вам требуется реализовать подсчет прибыли при торговле акциями.
Торги проходят в течении \(n\) дней, всего на рынке представлены акции \(m\) компаний, цены акций компании фиксированы в течении одного дня. Сделки бывают двух типов:
За каждую сделку надо заплатить 1% комиссии. Например, если купить 10 акций по 300 рублей, то суммарно заплатить придется 3030 рублей. Если же продавать 10 акций стоимостью 300 рублей каждая, то за них можно получить 2970 рублей.
Прибылью с продажи будем считать разность полученных при продаже денег и суммарно потраченных денег при покупках. Например, если 10 акций были куплены по 300 рублей, а затем еще 5 акций были куплены по 400 рублей, то в случае продажи по стоимости 500 прибыль составит: \(15 \cdot 500 \cdot 0.99 - (10 \cdot 300 \cdot 1.01 + 5 \cdot 400 \cdot 1.01) = 7425 - (3030 + 2020) = 2375\) рублей. При этом, акции могут быть проданы в убыток (за меньшую стоимость, чем были куплены), тогда прибыль с продажи будем считать отрицательной.
Суммарной прибылью в момент времени будем считать сумму всех прибылей с продаж, которые произошли до этого момента. Обратите внимание, что деньги, потраченные к этому моменту на покупку акций, которые еще не были проданы, не учитываются. Также будем считать, что у нас неограниченный бюджет для покупки акций, но рассматривать будем только прибыль. Число акций для покупки/продажи для каждой компании на рынке также не ограничено.
Вам даны \(k\) событий покупки/продажи. Необходимо найти минимальную суммарную прибыль среди всех моментов времени.
Входные данные
В первой строке входных данных содержится одно целое число \(t\) — число тестовых наборов (\(1 \le t \le 30\)).
Затем следуют \(t\) тестовых наборов. Каждый тестовый набор описывается следующим образом:
В первой строке тестового набора содержатся три целых числа \(n\), \(m\) и \(k\) — число дней, в которые проходят торги, число компаний на рынке и число событий, соответственно (\(1 \le n, m \le 100\), \(1 \le k \le 1000\)).
В следующих \(m\) строках записаны названия компаний и \(n\) чисел — стоимости акций компании в рублях в каждый из дней торгов. Названия компаний состоят из не более чем \(10\) строчных букв латинского алфавита и попарно различны. Стоимости акций — целые числа в диапазоне от \(1\) до \(10^5\) включительно.
В следующих \(k\) строках заданы события покупки/продажи в хронологическом порядке. Событие покупки задается в формате <день> buy <число акций> <название компании>, а событие продажи задается в формате <день> sell <название компании>. При этом <день> — целое число от \(1\) до \(n\), а <число акций> — целое число от \(1\) до \(1000\). Гарантируется, что все события следуют в порядке неубывания дней и корректны, а именно нет продаж некупленных акций и покупок акций, которых нет на рынке.
Выходные данные
Для каждого тестового набора выведите в отдельной строке минимальную прибыль среди всех моментов времени, с относительной или абсолютной погрешностью не более \(10^{-4}\).
Примечание
В первом тестовом наборе изначально до продаж суммарная прибыль равна \(0\), после первой продаже суммарная прибыль становится \(2375\) (случай разобран в примере).
Во втором тестовом наборе промежуточные прибыли равны \(0\), \(-11.11\) (акция продана дороже, но комиссия больше разницы) и \(1948.89\).
В третьем тестовом наборе промежуточные прибыли равны \(0\) и \(-2080\).
В четвертом тестовом наборе промежуточные прибыли равны \(0\) и \(979.9\), деньги потраченные на непроданные акции не учитываются.
| |
|
|
Биржа
Задача на реализацию
Задачи на моделирование
В данной задаче вам требуется реализовать подсчет прибыли при торговле акциями.
Торги проходят в течении \(n\) дней, всего на рынке представлены акции \(m\) компаний, цены акций компании фиксированы в течении одного дня. Сделки бывают двух типов:
За каждую сделку надо заплатить 1% комиссии. Например, если купить 10 акций по 300 рублей, то суммарно заплатить придется 3030 рублей. Если же продавать 10 акций стоимостью 300 рублей каждая, то за них можно получить 2970 рублей.
Прибылью с продажи будем считать разность полученных при продаже денег и суммарно потраченных денег при покупках. Например, если 10 акций были куплены по 300 рублей, а затем еще 5 акций были куплены по 400 рублей, то в случае продажи по стоимости 500 прибыль составит: \(15 \cdot 500 \cdot 0.99 - (10 \cdot 300 \cdot 1.01 + 5 \cdot 400 \cdot 1.01) = 7425 - (3030 + 2020) = 2375\) рублей. При этом, акции могут быть проданы в убыток (за меньшую стоимость, чем были куплены), тогда прибыль с продажи будем считать отрицательной.
Суммарной прибылью в момент времени будем считать сумму всех прибылей с продаж, которые произошли до этого момента. Обратите внимание, что деньги, потраченные к этому моменту на покупку акций, которые еще не были проданы, не учитываются. Также будем считать, что у нас неограниченный бюджет для покупки акций, но рассматривать будем только прибыль. Число акций для покупки/продажи для каждой компании на рынке также не ограничено.
Вам даны \(k\) событий покупки/продажи. Необходимо найти максимальную суммарную прибыль среди всех моментов времени.
Входные данные
В первой строке входных данных содержится одно целое число \(t\) — число тестовых наборов (\(1 \le t \le 30\)).
Затем следуют \(t\) тестовых наборов. Каждый тестовый набор описывается следующим образом:
В первой строке тестового набора содержатся три целых числа \(n\), \(m\) и \(k\) — число дней, в которые проходят торги, число компаний на рынке и число событий, соответственно (\(1 \le n, m \le 100\), \(1 \le k \le 1000\)).
В следующих \(m\) строках записаны названия компаний и \(n\) чисел — стоимости акций компании в рублях в каждый из дней торгов. Названия компаний состоят из не более чем \(10\) строчных букв латинского алфавита и попарно различны. Стоимости акций — целые числа в диапазоне от \(1\) до \(10^5\) включительно.
В следующих \(k\) строках заданы события покупки/продажи в хронологическом порядке. Событие покупки задается в формате <день> buy <число акций> <название компании>, а событие продажи задается в формате <день> sell <название компании>. При этом <день> — целое число от \(1\) до \(n\), а <число акций> — целое число от \(1\) до \(1000\). Гарантируется, что все события следуют в порядке неубывания дней и корректны, а именно нет продаж некупленных акций и покупок акций, которых нет на рынке.
Выходные данные
Для каждого тестового набора выведите в отдельной строке максимальную прибыль среди всех моментов времени, с относительной или абсолютной погрешностью не более \(10^{-4}\).
Примечание
В первом тестовом наборе изначально до продаж суммарная прибыль равна \(0\), после первой продаже суммарная прибыль становится \(2375\) (случай разобран в примере).
Во втором тестовом наборе промежуточные прибыли равны \(0\), \(-11.11\) (акция продана дороже, но комиссия больше разницы) и \(1948.89\).
В третьем тестовом наборе промежуточные прибыли равны \(0\) и \(-2080\).
В четвертом тестовом наборе промежуточные прибыли равны \(0\) и \(979.9\), деньги потраченные на непроданные акции не учитываются.
| |
|
|
Трансформация массива - 2
Жадный алгоритм
Задача на реализацию
Вам дано \(t\) пар массивов \(a_i\) и \(b_i\) равной длины.
За одну операцию модификации можно:
-
Поменять местами любые два элемента массива \(a_i\), но каждый элемент массива может участвовать не более чем в одном обмене.
-
Прибавить к любому элементу массива \(a_i\) единицу. Данную операцию можно применять неограниченное число раз к любому элементу массива.
Для каждой пары массивов найдите минимальное число операций, которые необходимо применить к массиву \(a_i\), чтобы получить массив \(b_i\), или определите, что это невозможно.
Входные данные
В первой строке дано число \(t\) — число пар массивов (\(1 \le t \le 40\)).
В следующих \(3t\) строках содержатся описания пар массивов. Каждая пара описывается тремя строками.
В первой из них дано число \(n_i\) — количество элементов в каждом массиве \(i\)-й пары(\(1 \le n_i \le 10\)). Во второй строке заданы \(n_i\) чисел \(a_{i,j}\) — элементы массива \(a_i\) (\(1 \le a_{i,j} \le 1000\)). В третьей строке заданы \(n_i\) чисел \(b_{i,j}\) — элементы массива \(b_i\) (\(1 \le b_{i,j} \le 1000\)).
Гарантируется, что сумма \(n_i\) по всем тестовым наборам не превосходит \(150\).
Выходные данные
Для каждого пары массивов выведите одно число — минимальное число операций, которые необходимо применить к массиву \(a_i\), чтобы получить массив \(b_i\), или \(-1\), если для данной пары это невозможно.
| |
|
|
Тестирование мессенджера - 2
Задача на реализацию
Хеш
Сортировка событий
Перед выпуском VK Messenger’а разработчики из компании IT-компании <<VK>>, как и положено, убеждаются в корректности работы приложения. Проверкой корректности работы систем занимаются тестировщики и QA-инженеры.
Часть функциональных тестов для тестирования смены ников выглядит следующим образом:
-
генерируется случайный сценарий взаимодействия пользователей с приложением;
-
в приложении симулируется выполнение этого сценария;
-
проверяется корректность итогового состояния приложения.
Вам предлагается почувствовать себя в роли тестировщика и реализовать решение, обрабатывающее сценарий без взаимодействия с приложением. Результат обработки сценария затем будет сравниваться с итоговым состоянием приложения.
Каждый сценарий состоит из трех наборов событий.
-
Первый набор состоит из событий вида <<в момент времени \(t_i\) поступил запрос регистрации нового пользователя с ID \(\mathtt{id}_i\) и ником \(\mathtt{handle}_i\)>>.
Гарантируется, что ID уникальны для всех пользователей приложения. Если выбранный ник никем не занят, регистрация проходит успешно, иначе запрос на регистрацию отклоняется. Во втором случае пользователь с тем же ID может попробовать зарегистрироваться еще раз.
-
Второй набор описывает события вида <<в момент времени \(t_i\) пользователь с ником \(\mathtt{handle}_{i,1}\) отправляет запрос на смену ника на \(\mathtt{handle}_{i,2}\)>>.
Гарантируется, что для каждого такого запроса ник \(\mathtt{handle}_{i,1}\) кому-то принадлежит. Если \(\mathtt{handle}_{i,2}\) уже занят каким-либо пользователем, запрос отклоняется, иначе пользователь успешно меняет ник. При успешной смене ника старый ник перестает ассоциироваться с каким-либо пользователем, пока кто-то снова его не займет.
-
Третий набор описывает события вида <<в момент времени \(t_i\) пользователь с ником \(\mathtt{handle}_{i,1}\) отправляет сообщение пользователю с ником \(\mathtt{handle}_{i,2}\).
Гарантируется, что и \(\mathtt{handle}_{i,1}\) и \(\mathtt{handle}_{i,2}\) на момент времени \(t_i\) соответствуют каким-то зарегистрированным пользователям.
Также гарантируется, что никакие два события не происоходят в одно и то же время, то есть все \(t_i\) уникальны.
Вам даны описания всех трех наборов событий. Определите для каждого пользователя, сколько он всего получил сообщений, и от какого пользователя он получил больше всего сообщений за весь сценарий.
Формат входных данных
В первой строке ввода дано единственное целое число \(T\) — количество сценариев, которое вам необходимо обработать (\(1 \le T \le 100\)).
Далее следуют \(T\) описаний сценариев. Описание каждого сценария начинается с пустой строки, после чего следуют три набора событий. В первой строке описания \(q\)-го набора (\(q\) от \(1\) до \(3\)) дано единственное целое число \(n_q\) — количество событий в наборе, после чего следуют \(n_q\) строк в указанном ниже формате (\(1 \le n_1 + n_2 + n_3 \le 1000\); \(0 \le n_q\)).
-
События первого набора задаются в формате <<REG \(\mathtt{id}_i\) BY \(\mathtt{handle}_i\) AT \(t_i\)>>.
-
События второго набора задаются в формате <<CHANGE \(\mathtt{handle}_{i,1}\) TO \(\mathtt{handle}_{i,2}\) AT \(t_i\)>>.
-
События третьего набора задаются в формате <<SEND FROM \(\mathtt{handle}_{i,1}\) TO \(\mathtt{handle}_{i,2}\) AT \(t_i\)>>.
Моменты событий \(t_i\) — целые числа от \(1\) до \(10^9\). Также все \(\mathtt{id}_i\) — целые числа от \(1\) до \(10^9\), а \(\mathtt{handle}_i\) — строки из маленьких латинских букв длины не более \(10\).
Гарантируется, что в каждом наборе входных данных все \(t_i\) различны. Гарантируется, что успешно зарегистрированный пользователь не предпринимает попытки зарегистрироваться еще раз.
Формат выходных данных
Для каждого сценария выведите требуемую статистику для каждого пользователя.
В первой строке статистики выведите целое число \(q\) — количество зарегистрированных пользователей. В следующих \(q\) строках выведите статистику для каждого пользователя в порядке возрастания их ID в формате <<<\(\mathtt{id}\)> RECEIVED <\(\mathtt{total}\)> TOP <\(\mathtt{count}_\mathrm{top}\)> FROM <\(\mathtt{id}_\mathrm{top}\)>>>, где \(\mathrm{total}\) — суммарное количество полученных пользователем сообщений, \(\mathtt{id}_\mathrm{top}\) — ID пользователя, от которого он получил больше всего сообщений, а \(\mathtt{count}_\mathrm{top}\) — само количество сообщений, полученных от пользователя \(\mathtt{id}_\mathrm{top}\).
Если у некоторого пользователя есть несколько собеседников, отправивших ему максимальное число сообщений, выведите в качестве \(\mathtt{id}_\mathrm{top}\) минимальный из их ID. Если пользователь не получал сообщения, считайте \(\mathtt{count}_\mathrm{top}\) равным \(0\).
| |
|
|
Система контроля версий
графы
Задача на реализацию
IT-компания <<VK>> имеет огромную инфраструктуру проектов, и чтобы разработчики могли гармонично работать вместе и структурировать вносимые в код изменения, им необходима система контроля версий (VCS).
Полноценные системы контроля версий устроены достаточно сложно, и некоторые компании даже разрабатывают свои собственные VCS, заточенные под конкретные нужды или особенности рабочего процесса. Разумеется, разработчики из <<VK>> могут справиться с задачей реализовать свою VCS, но сегодня эта задача предлагается вам.
Ваша примитивная система контроля версий должна иметь вид ацикличного ориентированного графа изменений состояния проекта.
-
<<Исток>> графа — стартовая вершина, соответствующая изначальному состоянию проекта. Это единственная вершина, в которую не входят ребра.
-
Каждая вершина, кроме корня, соответствует определенному коммиту. Коммит — блок из одного или более изменений.
-
Версия проекта, задаваемая вершиной — набор всех изменений на путях между стартовой вершиной и данной.
-
Есть несколько выделенных веток, каждая имеет уникальное имя и задается указателем на определенную вершину графа. С веткой ассоциируется версия проекта, соответствующая вершине, на которую она указывает.
-
Из всех веток выделяется текущая ветка — версия проекта, с которой сейчас работает пользователь. Вершину, на которую указывает текущая ветка, будем обозначать как HEAD.
Пример графа можно видеть ниже. Рядом с каждым коммитом указаны соответствующие ему изменения. Вершина номер \(8\) соответствует команде merge между ветками <<main>> и <<new_config>> (описание команд см. ниже). Набор команд, позволяющий получить приведенную структуру графа версий, приведен в первом тесте. Пошаговые иллюстрации изменения графа версий можно видеть в прикрепленном к условию архиве.
Изначально граф состоит из единственной вершины с номером \(1\), на которую указывает текущая ветка <<main>>. Требуется поддерживать следующие команды:
-
<<add <файл> <хеш изменений>>> — запомнить изменения, внесенные в данный файл. Хеш однозначно описывает набор изменений в файле. Иными словами, хеши двух независимых изменений совпадают тогда и только тогда, когда состояния файла до и после изменения одинаковы.
Иными словами, если в пустой файл добавляется строчка <<print(something)>>, и в непустой файл добавляется та же строчка, хеши этих двух изменений будут различными.
-
<<commit>> — подвесить к HEAD новую вершину, состоящую из всех изменений (add), сделанных с момента предыдущего успешного коммита. Новой вершине присваивается первый неиспользованный натуральный номер, после чего HEAD перемещается на нее.
Операция возможна только тогда, когда множество сделанных изменений непустое. В противном случае требуется выдать ошибку <<ERROR: no changes>>, при этом новая вершина не создается.
-
<<reset <номер>>> — переместить HEAD на вершину с данным номером.
Гарантируется, что вершина с данным номером существует. Если присутствуют несохраненные (commit) изменения (add), операция отклоняется с ошибкой <<ERROR: uncommitted changes>>.
-
<<checkout <имя ветки>>> — поменять текущую ветку на ветку с указанным именем (и, соответственно, переместить HEAD на версию, соответствующую выбранной ветке). Если ветки с таким именем не существует, создать новую ветку с таким именем, которая будет указывать на HEAD, после чего сделать ее текущей.
Если присутствуют несохраненные изменения, операция отклоняется с ошибкой <<ERROR: uncommitted changes>>, аналолгично операции reset.
-
<<merge <имя ветки>>> — объединить изменения в текущей ветке и в ветке с указанным именем. При этом создается новая вершина, которая подвешивается к HEAD и к вершине, соответствующей второй ветке. HEAD при этом перемещается на новую вершину, а указатель второй ветки не двигается. Гарантируется, что имя второй ветки не совпадает с текущей.
Если есть незакоммиченные изменения, операция отклоняется с ошибкой <<ERROR: uncommitted changes>>.
Если несохраненных изменений нет, проверяется отсутствие конфликтов при объединении. Конфликтом считается ситуация, когда в состояниях проекта, соответствующим данным веткам, с одним и тем же файлом сделаны различные изменения. Иными словами, если обозначить множество изменений определенного файла в текущей ветке как \(D_1\), а во второй — как \(D_2\), то конфликт возникает, когда оба множества \(D_1 \setminus D_2\) и \(D_2 \setminus D_1\) непустые. В таком случае операция отклоняется с ошибкой <<ERROR: conflicts detected>>.
Обратите внимание, что множества коммитов в двух версиях сравниваются как математические множества. Стоит считать, что ситуаций, когда в разных ветках одни и те же изменения одного файла располагаются в разном порядке, не существует.
Если какое-то изменение содержится в версиях разное ненулевое количество раз (например, изменение может присутствовать дважды после merge двух веток, в которые оно входило), конфликт не возникает. Конфликт возникает только если в каждой версии есть измененение одного и того же файла, которого нет в другой версии.
Ниже можно найти иллюстрации к успешным и конфликтным вызовам операции merge.
Вам дается последовательность команд, которые требуется обработать. Для каждой команды выведите через пробел слово <<OK>> и номер вершины, на которую указывает HEAD, если команда выполнена успешно, или же соответствующую ошибку, если команда отклонена.
Формат входных данных
В первой строке дано единственное целое число \(T\) — количество наборов входных данных, которые вам предстоит обработать (\(1 \le T \le 20\)). Далее следуют описания наборов входных данных.
Каждый набор входных данных начинается со строки, содержащей единственное целое число \(n\) — количество команд в наборе (\(0 \le n \le 400\)). В \(i\)-й из следующих \(n\) строк задается \(i\)-я команда.
Гарантируется, что имена веток состоят только из маленьких латинских букв (‘a’ – ‘z’) и нижних подчеркиваний (‘_’), а хеши изменений — уникальные шестнадцатеричные строки длины ровно \(6\) (состоят из цифр и маленьких латинских букв от ‘a’ до ‘f’). Имена файлов в команде add состоят из маленьких латинских букв, точек и слешей (‘/’).
Также гарантируется, что команде reset всегда передается существующая вершина, а команде merge — существующая ветка, не совпадающая с текущей.
Формат выходных данных
Для каждого набора входных данных в порядке их следования во вводе сначала выведите строку <<Test case <номер>>> (наборы нумеруются от \(1\) до \(T\)), а затем \(n\) результатов выполнения команд, каждый в своей строке.
Результат выполнения каждой команды должен соответствовать либо формату <<OK <HEAD>>>, либо формату <<ERROR: <сообщение об ошибке>>>.
| |
|
|
Сетка
Задача на реализацию
Линейные алгоритмы
Заданы числа \(k\), \(w\), \(h\) и \(t\).
Треуется нарисовать прямоугольную сетку шириной \(w\) и высотой \(h\), ячейки должны иметь размер \(k \times k\), толщина линий должна быть \(t\).
Для линий используйте символ <<*>>, для ячеек используйте символ <<.>>.
Формат входных данных
На первой строке ввода задано целое число \(k\) (\(1 \le k \le 10\)). На второй строке ввода задано целое число \(w\) (\(1 \le w \le 10\)). На третьей строке ввода задано целое число \(h\) (\(1 \le h \le 10\)). На четветрой строке ввода задано целое число \(t\) (\(1 \le t \le 10\)).
Формат выходных данных
Выведите изображение сетки.
В этой задаче 10 тестов, каждый оценивается независимо в 10 баллов.
| |
|
|
Шлюзы
Вывод формулы
Бинарный поиск в массиве
Задача на реализацию
Участникам, использующим язык Python3, рекомендуется отправлять решения на проверку с использованием интерпретатора PyPy3.
Недавно в Диваново построили огромную шлюзовую систему. Всего было построено \(n\) шлюзов, \(i\)-й из них имеет объем \(v_i\) литров. Изначально все шлюзы пусты. В каждый шлюз ведет труба, при открытии которой в шлюз будет поступать по \(1\) литру воды в секунду. Исходно все трубы закрыты.
Шлюзовая система устроена так, что если доливать воду в \(i\)-й шлюз сверх его объема, она будет моментально моментально переливаться в шлюз с номером \(i + 1\). Если шлюз c номером \(i + 1\) тоже заполнен, вода будет переливаться дальше. Вода из последнего шлюза будет выливаться в озеро.

Рисунок показывает \(5\) шлюзов с открытыми трубами к шлюзам \(1\) и \(3\). Так как шлюзы \(1\), \(3\) и \(4\) уже заполнены, фактически вода идет в шлюзы \(2\) и \(5\).
Для того, чтобы шлюзы начали функционировать, необходимо заполнить каждый из них. Мэра Дивановской области интересует \(q\) независимых запросов. Для каждого запроса предположим, что изначально все шлюзы пусты и все трубы закрыты, затем одновременно открываются несколько труб. Для \(j\)-го запроса мэр хочет знать, какое минимальное число труб надо включить, чтобы не позже чем через \(t_j\) секунд все шлюзы стали заполнены.
Помогите мэру справиться с этой сложной задачей и ответьте на все его запросы!
Формат входных данных
В первой строке вводится одно целое число \(n\) (\(1 \le n \le 200\,000\)) — количество шлюзов.
Во второй строке вводятся \(n\) целых чисел \(v_1, v_2, \dots, v_n\) (\(1 \le v_i \le 10^9\)) — объемы шлюзов.
В третьей строке вводится одно целое число \(q\) (\(1 \le q \le 200\,000\)) — число запросов.
В следующих \(q\) строках вводится по одному целому числу \(t_i\) (\(1 \le t_j \le 10^9\)) — время, за которое нужно наполнить все шлюзы в \(j\)-м запросе.
Формат выходных данных
Выведите \(q\) чисел, \(j\)-е из них должно быть равно минимальному числу труб, которое нужно открыть, чтобы наполнить все шлюзы за время \(t_j\). Если за это время наполнить всю шлюзы невозможно, выведите \(-1\).
В первом примере \(6\) запросов:
В запросах \(1, 3, 4\) ответ \(-1\). Чтобы заполнить первый шлюз нужно подождать \(4\) секунды, даже если открыты все трубы.
В шестом запросе можно открыть трубы в шлюзах \(1, 3\), и \(4\). Тогда через \(4\) секунды заполнятся шлюзы \(1\) и \(4\). Через \(1\) секунду \(1\) литр воды перельётся в шлюзы \(2\) и \(5\). Шлюз \(3\) будет заполнен своей трубой.
Аналогично во втором запросе можно открыть трубы в шлюзах \(1, 3\) и \(4\).
В пятом запросе можно открыть трубы в шлюзах с номерами \(1, 2, 3, 4\).
| |
|
|
Рамка для рисунка
Вывод формулы
Задача на реализацию
Задачи на моделирование
У Алексея есть набор, который состоит из n палочек длины 1 и m палочек длины 2. Палочки можно соединять между собой, либо выстраивая их в линию, либо под прямым углом.
Алексей хочет собрать из имеющихся палочек рамку прямоугольной формы, чтобы потом вставить в эту рамку лист бумаги и нарисовать красивый пейзаж для мамы на Новый год.
При этом Алексей считает, что чем больше будет площадь прямоугольника, тем значимей будет его подарок. Поэтому ему важно определить максимальную площадь прямоугольника, границу которого можно собрать из имеющихся палочек.
Формат входных данных
Первая строка входных данных содержит целое число n - количество палочек длины 1 (1 ≤ n ≤ 109).
Вторая строка входных данных содержит целое число m - количество палочек длины 2 (1 ≤ n ≤ 109).
Формат выходных данных
В единственной строке выведите единственное целое число - максимальную площадь прямоугольника, который можно сложить из имеющихся палочек. Если из имеющихся палочек невозможно сложить никакой прямоугольник, то выведите число 0.
Замечание
В первом примере есть 5 палочек длины 1. Из них можно сложить квадрат со стороной 1, его площадь равна 1, при этом одна палочка останется.
Во втором примере есть 4 палочки длины 1 и 3 палочки длины 2. Из них можно сложить прямоугольник размера 2 x 3.
В третьем примере есть 3 палочки длины 1, из них невозможно сложить прямоугольник.
| |
|
|
Неглухой телефон
Задача на реализацию
Возможно, что Вы когда то играли в игру «Глухой телефон», либо слышали о ней. В этой игре участникам приходится передавать информацию друг другу различными способами: словесно, образно, бывает даже приходится писать левой рукой текст, который другой участник команды должен будет прочитать. Так же известно, что практически никогда передаваемая информация не доходит до конечного адресата. Обозначим за Fi(x) функцию, которая преобразует текст передаваемой информации x в ту, которую получит участник i+1 от участника i. Тогда последний n-й участник получит данные y, которые будут выражаться следующей формулой:
y = Fn-1(Fn-2(…F2(F1(x))))
Но Вам необходимо исключить какие-либо внешние факторы, которые могут исказить исходную информацию и Вы должны реализовать программу «неглухой телефон», которая сможет безошибочно доставлять исходные данные, т.е. в нашем случае функция Fi(x) = x для всех i от 1 до n-1.
Входные данные
В первой строке записано число n от 1 до 100, во второй строке - сообщение переданное первым участником (строка длиной не более 255 символов).
Выходные данные
Выведите значение F(n)
| |
|
|
Олимпиада по выживанию
Вывод формулы
Задача на реализацию
В некоторой стране каждый год проходит олимпиада по выживанию. В финале участвуют по 4 человека от каждой из n провинций. По результатам соревнования составляется рейтинг, в который входят все 4n участников в порядке убывания баллов, равных баллов у участников не бывает. Дипломами награждаются ровно 50 % лучших участников (то есть если общее число участников было равно m, то награждаются m/2 первых участников из общего рейтинга).
После публикации предварительного рейтинга тренеры команд могут подавать апелляции против каких-то других провинций, обвинив участников из этой провинции в нарушении правил олимпиады. Каждый тренер может не подавать аппеляции или подать апелляцию на одну или несколько команд соперников.
Если жюри удовлетворит апелляцию против команды, то все участники из данной провинции будут дисквалифицированы и удалены из таблицы результатов. При этом общее число количество участников уменьшится на 4, а количество призёров олимпиады уменьшится на 2.
Тренеры команд каждой из провинций хотят улучшить результаты участников из своей провинции (то есть сделать так, чтобы количество участников олимпиады из этой провинции, которые стали призёрами, увеличилось хотя бы на одного). Для этого они планируют подать апелляции против команд других провинцией. Для каждой провинции определите, какое минимальное количество аппеляций должно удовлетворить жюри, чтобы количество участников из этой провинции, награждённых дипломами, увеличилось. Обратите внимание на то, что вы должны дать ответ для каждой провинции независимо, то есть без учёта возможных апелляций, поданных другими командами.
Входные данные
В первой строке входных данных содержится одно целое число n (1 ≤ n ≤ 25000) — количество провинций, участвовавших в олимпиаде. Следующие 4·n строк содержат рейтинг участников олимпиады, в порядке от лучшего участника к худшему. В i-й строке содержится число от 1 до n — номер команды i-го по рейтингу участника олимпиады. Гарантируется, что в списке участников каждое число от 1 до n встречается ровно 4 раза.
Выходные данные
Программа должна вывести n строк. В i-й строке необходимо вывести минимальное число апелляций, которое должно удовлетворить жюри, чтобы количество награждённых дипломами участников из i-й команды увеличилось. Если улучшить результаты i-й команды путём подачи апелляций нельзя, то в i-й строке должно быть записано число −1.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
2
1
1
1
2
2
2
2
1 |
-1
1 |
| 2 |
2
1
1
2
2
2
2
1
1
|
-1
-1 |
| 3 |
3
3
3
2
2
1
3
3
2
2
1
1
1 |
2
1
-1 |
Замечание
В первом примере из условия в олимпиаде участвовали две команды, и рейтинг участников выглядит так: 1, 1, 1, 2, 2, 2, 2, 1. По предварительному рейтингу дипломами награждаются три участника команды 1 и один участник команды 2. Команда 1 не может улучшить свои результаты, так как если команда 2 будет дисквалифицирована, то дипломы будут выданы всего 2 участникам из 4, но первоначально у команды 1 было 3 диплома. А вторая команда может увеличить количество призёров до 2, подав апелляцию против команды 1.
Во втором примере у обеих команд уже есть по 2 диплома, а при удалении одной из команд останется всего 2 призовых места, то есть при подаче апелляции против другой команды у каждой команды количество дипломов не изменится.
В третьем примере участвовали 3 команды и первоначально дипломами награждались участники из команд 3, 3, 2, 2, 1, 3. Команда 1 может улучшить свои результаты, если подаст две апелляции: против команд 2 и 3. Тогда останется только 4 участника (все они из команды 1), из них дипломами будет награждено двое. Команда 2 может улучшить свои результаты, если подаст одну апелляцию против команды 3. Тогда останется 8 участников и дипломами будут награждены 4 из них: 2, 2, 1, 2, — и у команды 2 станет 3 призёра вместо 2. Команда номер 3 не может улучшить свой результат при помощи апелляций.
| |
|
|
Майки и носки
Разбор случаев
Задача на реализацию
Как известно, осенью и зимой светает поздно и так хочется утром ещё хоть немного поспать, а не идти в школу! Некоторые школьники готовы даже одеваться, не открывая глаз, лишь бы отложить момент пробуждения. Вот и Саша решил, что майку и носки он вполне может вытащить из шкафа на ощупь с закрытыми глазами и только потом включить свет и одеться.
В шкафу у Саши есть два ящика. В одном из них лежит A синих и B красных маек, в другом — C синих и D красных пар носков. Саша хочет, чтобы и майка, и носки были одного цвета. Он вслепую вытаскивает M маек и N пар носков. В первое же утро Саша задумался, какое минимальное суммарное количество предметов одежды (M + N) он должен вытащить, чтобы среди них гарантированно оказались майка и носки одного цвета. Какого именно цвета окажутся предметы одежды, для Саши совершенно неважно.
Входные данные
На вход программе подаются четыре целых неотрицательных числа A, B, C, D, записанных в отдельных строках: A — количество синих маек, B — количество красных маек, C — количество синих носков, D — количество красных носков. Все числа не превосходят 109 . Гарантируется, что в шкафу есть одноцветный комплект из майки и носков.
Выходные данные
Программа должна вывести два числа: количество маек M и количество пар носков N, которые должен взять Саша. Необходимо, чтобы среди M маек и N пар носков обязательно нашлась одноцветная пара, при этом сумма M + N должна быть минимальной.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
6
2
7
3 |
3 4 |
Замечание
В примере из условия в шкафу лежит A = 6 синих маек и B = 2 красных маек. Если взять 3 майки, то среди них обязательно найдётся синяя. В другом ящике лежит C = 7 пар синих носков и D = 3 пары красных носков. Если взять 4 пары, то среди них обязательно будет пара синих
носков. Поэтому если взять вслепую 3 майки и 4 пары носков, то среди них обязательно найдётся одноцветный (синий) комплект из майки и носков.
| |
|
|
Надпись на табло
Задача на реализацию
Вы получили доступ к одной из камер наблюдения в особо секретной огранизации. В зоне видимости камеры находится табло, с которого вы постоянно считываете информацию. Теперь вам нужно написать программу, которая по состоянию табло определяет, какая буква изображена на нём в данный момент. Табло представляет из себя квадратную таблицу, разбитую на n × n равных квадратных светодиодов. Каждый диод либо включён, либо выключен. Введём систему координат, направив ось OX вправо, а ось OY — вверх, приняв сторону диода равной 1.
На табло могут быть изображены только следующие буквы:
• I — прямоугольник из горящих диодов.
• O — прямоугольник из горящих диодов с углами (x1, y1) и (x2, y2), внутри которого есть прямоугольник из выключенных диодов с координатами углов (x3, y3) и (x4, y4). При этом границы выключенного прямоугольника не должны касаться внешнего, то есть x1 < x3 < x4 < x2 и y1 < y3 < y4 < y2.
• C — прямоугольник из горящих диодов с углами (x1, y1) и (x2, y2), внутри которого есть прямоугольник из выключенных диодов с координатами углов (x3, y3) и (x4, y4). При этом правая граница выключенного прямоугольника находится на правой границе внешнего прямоугольника, то есть x1 < x3 < x4 = x2 и y1 < y3 < y4 < y2.

• L — прямоугольник из горящих диодов с углами (x1, y1) и (x2, y2), внутри которого есть прямоугольник из выключенных диодов с координатами углов (x3, y3) и (x4, y4). При этом правые верхние углы выключенного прямоугольника и внешнего прямоугольника совпадают, то есть x1 < x3 < x4 = x2 и y1 < y3 < y4 = y2.
• H — прямоугольник из горящих диодов с углами (x1, y1) и (x2, y2), внутри которого находятся 2 прямоугольника из выключенных диодов с координатами углов (x3, y3), (x4, y4) у первого и (x5, y5), (x6, y6) у второго. При этом выключенные прямоугольники должны иметь одинаковую
ширину, находиться строго один под другим, один прямоугольник должен касаться верхней стороны, а другой прямоугольник должен касаться нижней стороны внешнего прямоугольника, то есть x1 < x3 = x5 < x4 = x6 < x2 и y1 = y3 < y4 < y5 < y6 = y2.

• P — прямоугольник из горящих диодов с углами (x1, y1) и (x2, y2), внутри которого находятся 2 прямоугольника из выключенных диодов с координатами углов (x3, y3), (x4, y4) у первого и (x5, y5), (x6, y6) у второго. При этом правый нижний угол первого выключенного прямоугольника должен совпадать с правым нижним углом внешнего прямоугольника, а другой выключенный прямоугольник должен находиться строго выше и не касаться границ других прямоугольников, также левые границы двух выключенных прямоугольников должны совпадать, то есть x1 < x3 = x5 < x6 < x4 = x2 и y1 = y3 < y4 < y5 < y6 < y2.

• Любое другое состояние табло считается буквой X.
По виду табло определите, какая буква на нём изображена.
Входные данные
В первой строке входных данных находится одно число n (1 ≤ n ≤ 10) — сторона табло.
В следующих n строках находятся строки длины n из символов «.» и «#» — строки таблицы.
«.» обозначает выключенный квадратный диод табло, а «#» — горящий.
Выходные данные
Программа должна вывести единственный символ: если данная таблица подходит под одно из описаний букв I, O, C, L, H, P, то выведите её (все буквы — английские). Если же данная таблица не подходит ни под какие условия, то выведите X.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4
.##.
.##.
.##.
....
|
I |
| 2 |
5
#...#
.#.#.
..#..
.#.#.
#...#
|
X |
| |
|
|
Засада на переговорах
Задача на реализацию
Конструктив
Саша Белый и его бригада приехали на переговоры в Сатку. Однако беседа обещает быть жаркой, поэтому Саша хочет спрятать свою братву в засаду. Переговоры будут проходить на квадратном поле размером 2N×2N, и в каждую клетку этого поля Белый может посадить от 0 до 2 братанов. Так как Саша не любит повторяться, то суммарное количество братанов в каждом столбце и в каждой строке квадратного поля должно быть различным.
Как вы знаете, из-за определённых обстоятельств Белый не закончил вуз, поэтому не силён в программировании, и вам нужно срочно помочь ему.
Подскажите Белому, сможет ли он расставить братву с заданным условием, и если сможет, то приведите пример расстановки.
Входные данные
Во входных данных записано единственное целое число N такое, что 2N — длина стороны поля (1 <= N <= 300).
Выходные данные
На первой строке выведите YES, если существует расстановка, что суммарное количество братанов в каждом столбце и в каждой строке квадратного поля различно, и NO в противном случае. Если расстановка существует, то на следующих 2N строках выведите пример. Если существует несколько подходящих расстановок, то можете вывести любую из них.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
1 |
YES
0 0
1 2 |
| 2 |
2 |
YES
0 1 0 2
2 2 0 2
0 2 1 2
0 2 0 2 |
| |
|
|
Горнолыжный курорт
Разбор случаев
Задача на реализацию
Саша Белый недавно устроился подрабатывать на горнолыжный курорт недалеко от Аши. Первым делом ему поручили установить ограждения для лыжной трассы.
Саше дали n ограждений, каждое длиной ai. Любые два последовательных ограждения скреплены друг с другом, но при этом могут произвольно поворачиваться друг относительно друга.
Саша хочет сделать трассу интересной: по его мнению, трасса должна быть в форме спирали (ограждение под номером i +1 должно быть повернуто на 90 градусов по часовой стрелке относительно ограждения под номером i; при этом никакие ограждения, кроме смежных, не должны касаться друг друга и пересекаться).
К сожалению, не из любых наборов ограждений можно сложить спираль. Помогите Саше для заданного набора определить, возможно ли из него составить спираль.
Входные данные
В первой строке входных данных записано целое число n — количество ограждений (1 <= n <= 105). Во второй строке через пробел заданы n целых чисел ai — длина i-го ограждения (1 <= ai <=109).
Выходные данные
Выведите YES, если возможно из данных ограждений сложить спираль, или NO в противном случае.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5
1 2 3 3 5 |
YES |
| 2 |
6
5 7 6 8 6 10 |
NO |
| 3 |
9
1 1 2 2 6 2 2 1 1 |
YES |
Замечание
Обратите внимание на третий пример, спираль может иметь два центра, главное, чтобы ограждения не пересекались. Иллюстрация к третьему примеру:
| |
|
|
Ящики
математика
Вывод формулы
Задача на реализацию
Саша Белый давно планировал переехать в Кыштым. И вот настал день X. Саша собрал все свои вещи в ящики и вынес их на улицу. Ящики были распределены на n стопок, расположенных вдоль одной прямой, следующим образом: a1 ящиков в первой стопке стоят непосредственно у газели, a2 ящиков во второй стопке – правее первой на метр, следующие a3 еще через метр и т.д. Теперь Белому нужно переставить все ящики как можно ближе к газели, а именно, все ящики из второй, третьей и т.д. стопок должны быть переставлены в первую стопку к исходным a1 ящикам.
Саша за этот день уже очень устал. Но, к счастью, мимо проходили n мальчишек. Ребята согласились перенести ящики. Каждый из них, ввиду своей выносливости, переносит грузы следующим образом:
1. i-й мальчик проходится по стопкам, номера которых делятся на i, справа налево.
2. Он берет из первой стопки на своем пути ровно один ящик (эта стопка обязана быть непустой).
3. Пройдя i метров налево (то есть до следующей стопки, номер которой делится на i), он снова берет один ящик со стопки, рядом с которой он стоит (исходя из этого, в стопке обязательно должен быть хотя бы один ящик), пройдя еще i метров налево он снова берет ящик и так далее.
4. Когда i-й мальчик доходит до стопки с номером i, он кладет все ранее взятые ящики в эту стопку.
Каждый из ребят может делать сколько угодно проходов. Мальчики могут делать проходы в любом порядке (например, возможна ситуация, когда сначала проходится второй
мальчик, потом первый и снова второй).
Теперь Саша Белый хочет знать, получится ли у них переставить все ящики в начало. Скажите ему ответ на вопрос.
Входные данные
В первой строке входных данных записано целое число n количество стопок ящиков (1 <= n <= 105).
Во второй строке через пробел записаны n целых чисел di количество ящиков в i-й стопке (1 <= di <= 109).
Выходные данные
Выведите YES, если существует способ, при котором ребята перенесут все ящики к газели в первую стопку, или NO, если такого способа нет.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5
2 1 3 5 3 |
YES |
| 2 |
4
1 5 2 3 |
NO |
Замечание
В первом примере сначала второй мальчик пройдется два раза, таким образом перенеся два ящика из четвертой стопки во вторую. После этого шага d = (2,3,3,3,3). Потом первый мальчик пройдется 3 раза, перетащив все ящики в первую стопку.
Во втором примере мальчикам не удастся перенести все ящики в первую стопку.
| |
|
|
Сериал
Линейные алгоритмы
Задача на реализацию
В свободное от учебы время Даша очень любит смотреть мультсериалы, снятые по комиксам. Она уже выбрала мультсериал для просмотра, но есть одна проблема. Достаточно часто в экранизациях комиксов серии снимают не последовательно по хронологии событий, а в каком-то странном порядке.
Чтобы избавить себя от путаницы, Даша решила, что выберет и посмотрит ровно три серии, причем так, чтобы номера этих серий шли в возрастающем порядке и годы, в которые происходят события в сериях, тоже шли в возрастающем порядке. Для каждой серии известно, в каком году происходят события этой серии.
Помогите Даше найти три подходящие серии для просмотра.
Входные данные
В первой строке входных данных записано единственное целое число N — количество серий (3 <= N <= 105 ).
В каждой из следующих N строк записано по одному целому числу — год, в который происходят события очередной серии (каждый год является целым числом от 1 до 109 включительно).
Выходные данные
Программа должна вывести три целых числа i, j, k (1 <= i < j < k <= N) — номера искомых трех серий. Серии нумеруются числами от 1 до N. Если ответов несколько, выведите любой из них. Если ответа не существует, выведите одно число ноль.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4
1985
2000
1990
2005 |
1 2 4 |
| 2 |
4
2000
2000
2001
2001 |
0 |
Замечание
В первом примере нужно выбрать серии 1, 2, 4, действие которых происходит в 1985, 2000 и 2005 годах соответственно.
Во втором примере выбрать три серии, удовлетворяющие условиям задачи, нельзя.
| |
|
|
Подпоследовательность с максимальной суммой
Префиксные суммы(минимумы, ...)
Алгоритмы обработки
Задача на реализацию
Дана последовательность из N целых чисел. Рассматриваются все её непрерывные подпоследовательности, начинающиеся с первого элемента последовательности. Найдите максимальную сумму подпоследовательности, кратную K, и количество таких подпоследовательностей.
Входные данные
В первой строке записаны два числа: количество чисел в последовательности N (1 <= N <= 106) и число K (1 <= K <= 100). Далее идет N строк, по одному целому числу в строке. Каждое число не превышает 10000.
Выходные данные
Выведите на экран два числа через пробел: максимальную сумму подпоследовательности, кратную K и количество таких подпоследовательностей.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5 2
2
-2
2
-2
2 |
2 3 |
| |
|
|
Морской бой
Вывод формулы
Задача на реализацию
Чтобы разнообразить игру «морской бой» Боря решил добавить в неё новый тип кораблей. Эти корабли состоят из двух прямоугольников. Первый прямоугольник имеет ширину w1 и высоту h1, а второй прямоугольник - w2 и h2 соответственно. Прямоугольники располагаются один над другим и выровнены по левому краю (см. рисунки примеров): введём на поле систему координат так, чтобы левая нижняя клеточка первого прямоугольника имела координаты (1,1). Тогда верхняя правая клеточка первого прямоугольника имеет координаты (w1,h1), левая нижняя клеточка второго прямоугольника имеет координаты (1,h1+1), а правая верхняя клеточка второго прямоугольника имеет координаты (w2,h1+h2).
По правилам морского боя, после уничтожения корабля необходимо отметить все клеточки, соседние по стороне или углу с клеточками, в которых есть корабль, потому что в этих клеточках уже не могут стоять другие корабли. При этом отмечаются только не принадлежащие кораблю клетки.
Определите, сколько клеток надо будет отметить после уничтожения корабля, придуманного Борей. Поле, на котором, происходит игра, бесконечно во все стороны.
Входные данные
В четырёх строках заданы четыре целых числа w1,h1,w2 и h2 (1<=w1,h1,w2,h2<=108) - ширина первого прямоугольника, высота первого прямоугольника, ширина второго прямоугольника и высота второго прямоугольника, соответственно.
Выходные данные
Выведите одно целое число — количество клеток, которые необходимо закрасить после уничтожения корабля.
Примечание
В первом примере поле выглядит так (красным обозначен первый прямоугольник, синим обозначен второй прямоугольник, зеленым обозначены отмеченные точки):

Во втором примере поле выглядит так:

Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
2
1
2
1 |
12 |
| 2 |
2
2
1
2 |
16 |
| |
|
|
Диадема Клеопатры
Задача на реализацию
Разбор случаев
Аня — страстный любитель ювелирных изделий. Ее коллекция насчитывает множество бриллиантов, изумрудов и алмазов.
...Срочная новость! Бесценный змеиный рубин Клеопатры был украден!
Три дня назад мир потрясло сенсационное известие: исследовательская экспедиция обнаружила в одном из храмов, построенных во времена великой египетской императрицы Клеопатры, потайную комнату. В ней кроме бронзовой статуи императрицы обнаружилась поразительной красоты диадема, ранее считавшаяся бесследно утерянной! Ученые сообщили, что диадема увенчана алым a-каратным рубином в форме змеиной головы. Однако буквально пару часов назад поступила новость, что бесценное украшение было изувечено: кто-то пробрался в камеру хранения диадемы и вырезал из нее рубин! Полиция устанавливает круг подозреваемых...
Услышав о краже рубина, Аня сразу бросилась исследовать информацию на черных рынках. В течение дня она обнаружила N объявлений о продаже рубина в форме змеиной головы, утверждающих что это именно украденная древняя ценность. Аня не простит себе, если она упустит такой бесценный экспонат для своей коллекции, поэтому она приказала своему помощнику Глебу срочно купить все эти камни, надеясь приобрести среди них настоящую реликвию.
Купив все N камней, Глеб тут же провел несколько пробных измерений, взвесив некоторые наборы из них, и отправил результаты Ане по электронной почте. Тем временем она проконсультировалась с известным исследователем старины Андрэ Шесто-Мерта по поводу украденной драгоценности и узнала, что по всем имеющимся историческим источникам рубин весил не a карат, как утверждали журналисты, а b карат!
Зная результаты взвешиваний Глеба, и учитывая, что все поддельные камни весят a карат, и только настоящий змеиный рубин может весить b карат, определите, какие из купленных камней могут на самом деле являться потерянной реликвией великой императрицы прошлого.
Входные данные
В первой строке находятся четыре целых числа N, a, b и K (1 ≤ N ≤ 200, 1 ≤ a, b ≤ 1 000 000, a ≠ b, 1 ≤ K ≤ 1 000).
Далее идут K строк, описывающих взвешивания, проведенные Глебом.
Первое число в i-ом описании — wi (1 ≤ wi ≤ 200 000 000), суммарный вес группы камней, участвовавших в i-ом взвешивании.
Второе число — mi (1 ≤ mi ≤ N) — количество камней, участвовавших в i-ом взвешивании.
Далее следуют mi целых чисел, упорядоченных по возрастанию, — номера камней, участвовавших в i-ом взвешивании.
Выходные данные
Если среди купленных Глебом камней змеиного рубина точно нет, выведите строку "Fail" (без кавычек).
Если украденный рубин может присутствовать среди камней, то выведите в первой строке количество всех возможных кандидатур на роль древней реликвии, а второй строке — номера возможных вариантов. Выводить номера можно в произвольном порядке.
Если же Глеб в некоторый момент ошибся в расчетах, и присланная им информация о взвешиваниях не может соответствовать действительности, выведите строку "Impossible" (без кавычек).
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4 15 17 2
30 2 1 3
47 3 2 3 4 |
2
2 4 |
| 2 |
3 15 17 3
30 2 1 2
30 2 2 3
47 3 1 2 3 |
Impossible |
| 3 |
2 1 2 2
1 1 2
1 1 1 |
Fail |
Примечание
В первом тесте из первого взвешивания мы делаем вывод, что первый и третий камни гарантированно поддельные. С другой стороны, среди второго, третьего и четвёртого камня точно есть настоящий. Значит настоящим может оказаться второй или четвёртый камень.
Во втором тесте Глеб ошибся в измерениях, потому что из первых двух измерений следует, что все камни фальшивые, а из последнего — что настоящий камень, тем не менее, среди них присутствует.
В третьем тесте из результатов явно следует, что оба приобретенных камня фальшивые.
| |
|
|
Порядочные числа
Вывод формулы
Задача на реализацию
У Миши развитое эстетическое чувство. Он считает, что не все числа одинаково порядочные. Когда ему грустно, он начинает придумывать числа и приводить их в порядок.
Миша очень любит рассматривать сумму цифр числа. Для того чтобы привести в порядок число A, он сначала записывает само число. Потом он пишет сумму цифр этого числа. Затем — сумму цифр суммы цифр и так далее, до тех пор, пока очередное число не станет однозначным. Он считает, что результатом приведения в порядок числа A является сумма всех выписанных чисел, включая само число A.
Миша настолько любит этот процесс, что он даже заменяет ему счёт овец, когда долго не получается заснуть. Он помнит, что вчера ночью, когда он в уме привёл в порядок число A, у него получилось число B. Но вот беда — он не помнит, какое именно он взял число A! Помогите ему в отыскании этого числа.
Входные данные
На ввод подаётся единственное целое число B (1 ≤ B ≤ 109 )
Выходные данные
Если существует такое число A, что после приведения его в порядок, получается B, то выведите любое такое число. Если же Миша где-то ошибся в расчётах и такого числа не существует, то выведите -1.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
42 |
29 |
| 2 |
20 |
-1 |
| |
|
|
Тюрьма для Зедда
Вывод формулы
Задача на реализацию
Разбор случаев
Черный рейнджер нашел в жерле заброшенного вулкана n прямоугольных листов металла разного размера, i-й лист имеет размер ai на bi метров.
Зордон поручил построить Черному рейнджеру тюрьму для злобного генерала Зедда, и эта находка оказалась для него просто подарком судьбы. Тюрьма должна иметь вид прямоугольного параллелепипеда каждая грань которого представляет собой цельный лист металла. Так что рейнджер собирается взять 6 из найденных им листов металла, сложить из них параллелепипед, и показать его Зордону. Листы нельзя гнуть или разрезать, листы, из которых будет сложена тюрьма не должны выступать за её края.
Поскольку чем больше тюрьма, чем надежнее, параллелепипед должен иметь максимальный возможный объем. Помогите герою выбрать 6 листов прямоугольников так, чтобы собрать из них самую большую тюрьму.
Листы можно поворачивать, таким образом, например, листы 4 на 7 метров и 7 на 4 метра считаются одинаковыми.
Формат входных данных
В первой строке дано одно число n — количество листов металла у Черного Рейнджера (6 ≤ n ≤ 200 000).
В следующих n строках даны пары чисел ai; bi — размеры i-го куска металла (1 ≤ ai; bi ≤ 106).
Формат выходных данных
Выведите одно целое число — максимальный объем прямоугольного параллелепипеда, который можно собрать из этих кусков металла.
Если из данных листов невозможно собрать прямоугольный параллелепипед, выведите -1.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
6
3 6
6 9
9 3
6 3
3 9
9 6 |
162 |
| 2 |
6
1 1
1 1
1 1
1 1
1 1
1 1 |
1 |
| 3 |
6
1 2
2 3
3 4
4 5
5 6
6 1 |
-1 |
| |
|
|
Объединенная армия
Динамическое программирование
битмаски
Задача на реализацию
Для борьбы с могучими рейнджерами Рита Репульса и Лорд Зедд решили объединить Глиняный и Зедд патрули. Для более эффективного нападения на Энджел Гроув они хотят построить свою армию в две шеренги. Количество солдат в первой шеренге равно количеству солдат во второй.
Рита любит два вопроса:
- «Правда ли, что ровно x из твоих соседей из Зедд патруля?»
- «Правда ли, что ровно y из твоих соседей из Глиняного патруля?»
Соседями в данном построении являются солдаты слева и справа в той же шеренге, а также солдат, который стоит на той же позиции, но в другой шеренге. Рита выбрала либо один из этих вопросов либо оба, и задала каждому солдату. Всем солдатам были заданы вопросы с одними и теми же значениями x и/или y.
Зордан с помощью своей магической силы все это время наблюдал за процессом построения. Он был очень удивлен тем, что ответы всех солдат были положительными. Однако, он помнит, что солдаты из Зедд патруля всегда говорят правду, а солдаты из Глиняного патруля обязательно солгут хотя бы на один вопрос.
Так как солдаты из Зедд патруля наиболее опасны по мнению Зордана, исходя из ответов, он хочет узнать какое наименьшее и наибольшее количество солдат из Зедд патруля могло быть в объединенной армии. Он обратился к вам за помощью!
Входные данные
В единственной строке входного файла содержатся три целых числа k, x, y — количество солдат в одной шеренге и числа из вопросов (1 ≤ k ≤ 105; -1 ≤ x, y ≤ 3).
Если x = -1, это означает, что Рита не задавала первый вопрос.
Если y = -1, это означает, что Рита не задавала второй вопрос.
Гарантируется, что Рита задала хотя бы один вопрос.
Выходные данные
Если для данных k, x и y не существует ни одного способа построения, выведите -1.
Иначе, первая строка выходного файла должна содержать одно число — наименьшее возможное количество солдат из Зедд патруля в армии.
В следующих двух строках должно содержаться по k символов «0» и «1» — описание шеренг:
- «0» означает, что в построении на соответствующей позиции стоит солдат из Глиняного патруля.
- «1» — солдат из Зедд патруля.
Вторая строка описывает первую шеренгу, третья — вторую. Не разделяйте символы пробелами.
Четвертая строка выходного файла должна содержать одно число — наибольшее возможное количество солдат из Зедд патруля в армии.
В пятой и шестой строках выведите описание возможного построения в таком случае в аналогичном формате.
Если существует несколько способов расставить солдат, разрешается вывести любой.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
2 0 -1 |
2
01
10
2
01
10 |
| 2 |
5 1 2 |
0
00000
00000
4
01010
01010 |
| 3 |
1 2 2 |
0
0
0
0
0
0 |
| 4 |
10 0 3 |
5
0100010010
0001000100
8
0101010100
0010101010 |
| |
|
|
Космический корабль
Вычисление по заданной формуле
Задача на реализацию
На пути к спасению городка Энджел Гроув черный рейнджер Зак Тейлор столкнулся с очередным препятствием. Рейнджер оказался на инопланетном космическом корабле в окружении врагов, и теперь, чтобы освободиться, ему необходимо уничтожить всех врагов в определенном порядке.
Каждый из n врагов обладает силой fi. Однако среди них имеется главный враг — босс, чья сила равняется сумме сил всех остальных врагов. Так как уничтожение босса требует полной концентрации и сосредоточенности, Зак сможет справиться с ним только после того, как уничтожит всех остальных врагов.
В запасе у рейнджера мало времени, так что он не успевает понять, кто босс. Ему необходима ваша помощь. Восстановите порядок, в котором Заку Тейлору необходимо уничтожать врагов, чтобы выбраться на свободу.
Входные данные
В первой строке находится натуральное число n — количество врагов (3 ≤ n ≤ 105).
Во второй строке находятся n целых чисел fi, задающих силу каждого врага (-109 ≤ fi ≤ 109).
Силы врагов заданы в случайном порядке.
Выходные данные
В единственной строке выведите числа fi в порядке, в котором соответствующие им враги будут уничтожаться рейнджером. Если существует несколько порядков, выведите любой.
Гарантируется, что решение всегда существует, а также существует ровно один враг, который может быть боссом.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3
2 5 3 |
2 3 5 |
| 2 |
5
-1 1 0 1 -1 |
-1 1 1 -1 0 |
| |
|
|
При каком наименьшем х?
Системы счисления
Задача на реализацию
Значение выражения \( 27^7 - 3^{11} + 36 - x\) записали в троичной системе счисления, при этом сумма цифр в записи оказалась равной b (вводится с клавиатуры, 0 < b < 100). Напишите программу, которая выводит на экран минимальное натуральное значение x. Гарантируется, что ответ существует.
| |
|
|
Сколько таких цифр? Решаем программой
Разные системы счисления
Задача на реализацию
Результат арифметического выражения \(9^9 – 3^9 + 9^{19} – 19 \) записали в троичной системе счисления. Напишите программу, которая определит количество цифр "2", "1" и "0"в результирующем числе. Выведите ответ в одной строке, через пробел, в указанном порядке.
| |
|
|
Экспресс тест
Задача на реализацию
Алгоритмы обработки
Задачи на моделирование
В данной задаче вам предлагается автоматизировать оценку результата экспресс теста.
Вам дана двухцветная картинка размером 10×20. Для обозначения цветов используются символы «#» и «.». Тест
считается отрицательным, если на картинке изображена одна вертикальная полоска и положительным, если три. В любом
другом случае тест считается испорченным.
Полоской будем считать область картинки 10×k, состоящую из символов «#», где k может быть произвольным. При этом
все соседние клетки с этой областью должны быть «.». Полоска может находиться на границе картинки.
Входные данные
В первой строке входных данных задано число t - число тестов (1 ≤ t ≤ 30). В следующих t⋅10+(t−1) строках заданы картинки
тестов. Соседние картинки разделены пустыми строками. После последней картинки, пустой строки нет.
Каждая картинка состоит из 10 строк по 20 символов, каждый из которых либо «#», либо «.».
Выходные данные
Для каждой картинки выведите результат теста в отдельной строке:
Negative - если тест отрицательный;
Positive - если тест положительный;
Incorrect - если тест испорчен.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........#..........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..##......#.....###.
..##......#.....###.
..##......#.....###.
..##......#.....###.
..#.......#.....###.
..#.......#.....###.
..##......#.....###.
..#.......#.....###.
|
Negative
Incorrect
Positive
Incorrect |
| |
|
|
Лазерная пушка
Элементарная геометрия
Разбор случаев
Задача на реализацию
У игрока в космической стрелялке есть очень мощная лазерная пушка. Но она неподвижна и может стрелять только в одном направлении. Игрок может расставить на игровом поле двусторонние зеркала, меняющие ход луча, чтобы поражать врагов. Введём декартову систему координат с центром, где расположена пушка, то есть пушка имеет координаты (0; 0). Пушка стреляет в направлении точки (1; 1). Игрок может поставить зеркала в точках с целочисленными координатами. Зеркала могут быть горизонтальными или вертикальными, попадание луча в зеркало меняет траекторию луча по законам отражения света. Некоторые возможные варианты отражения луча от зеркала изображены на рисунке.

Вам необходимо расставить минимальное количество зеркал так, чтобы лазерный луч поразил цель.
Входные данные
Программа получает на вход два целых числа X и Y , не превосходящих по модулю 10000, записанные в разных строках — координаты цели. Точка (X; Y) не совпадает с началом координат.
Выходные данные
Программа должна вывести в первой строке число N — необходимое количество зеркал. Следующие N строк должны содержать информацию о каждом зеркале. В i-й строке должны быть записаны через пробелы два целых числа xi и yi и один символ ti , обозначающие координаты (xi ; yi) точки, в которых установлено i-е зеркало, и тип этого зеркала ti . Если ti является символом «V», то i-е зеркало размещено вертикально, если же ti является символом «H», то зеркало размещено горизонтально. Например, строка «-2 5 H» обозначает горизонтальное зеркало в точке (−2; 5). Зеркала можно выводить в любом порядке. Зеркало нельзя размещать в точке (0; 0), также нельзя размещать два зеркала в одной точке. Значения xi и yi не должны по модулю превосходить 100 000. Также, разумеется, нельзя допустить, чтобы отражённый луч попал в пушку. Если вариантов ответа несколько, выведите любой из них. Если поразить цель в соответствии с условиями задачи невозможно, программа должна вывести одно число «-1». Если для поражения цели зеркала не нужны, программа должна вывести одно число «0»
Примеры
| № |
Входные данные |
Выходные данные |
Пояснение |
| 1 |
5
1 |
1
3 3 H |
 |
| |
|
|
Ну все, я попрыгал!
Вывод формулы
математика
Задача на реализацию
Персонаж известной компьютерной игры Марио постарел и почти перестал прыгать. Но совсем недавно он увидел спуск из N ступенек, и его накрыло ностальгией. Марио встал на самую верхнюю ступеньку и решил преодолеть этот спуск при помощи прыжков.
Когда-то Марио знал тысячи различных видов прыжков, но теперь он смог вспомнить только два: короткие и длинные. Короткий прыжок позволяет спуститься на произвольное число ступенек, не большее X, а длинный — на произвольное число, не большее Y (X < Y ). Но в силу возраста Марио не может делать два длинных прыжка подряд и вынужден между ними совершать хотя бы один короткий. При этом Марио не хочет слишком уж сильно ухудшить свои прошлые результаты и поэтому постарается обойтись как можно меньшим числом прыжков.
Помогите Марио посчитать минимальное количество прыжков, требующееся для преодоления всех N ступенек.
Входные данные
В первой строке входных данных записано целое число X — максимальная длина короткого прыжка.
Во второй строке записано целое число Y (1 ≤ X < Y ≤ 1018) — максимальная длина длинного прыжка.
В третьей строке записано целое число N (1 ≤ N ≤ 1018) — количество ступенек в спуске.
Выходные данные
В единственной строке выведите целое число — минимальное число прыжков, необходимое Марио для спуска.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
2
3
5 |
2 |
| 2 |
1
2
4 |
3 |
| 3 |
1
100
1000000000000000000 |
19801980198019801 |
Замечание
На изображениях ниже приведены возможные способы решения первых двух тестов из условия:
| |
|
|
Цифры в умножении
Задачи на моделирование
Задача на реализацию
Дано целое число N (\(1<=N<=10^{10}\)).
Для двух положительных целых чисел A и B определим \(F (A, B)\) как большее из двух:
- количество цифр в десятичной записи числа A;
- количество цифр в десятичной записи числа B.
Например, \(F (3,11) = 2\), поскольку 3 состоит из одной цифры, а 11 - из двух.
Найдите минимальное значение \(F (A, B)\) среди всех пар положительных целых чисел A и B, таких что \(N = A \cdot B\).
Входные данные
На вход подается целое число N (\(1<=N<=10^{10}\)).
Выходные данные
Выведите на экран ответ на задачу.
Примеры
| № |
Входные данные |
Выходные данные |
Пояснение |
| 1 |
10000 |
3 |
\(F(A,B) \) имеет минимальное значение при \((A,B)=(100,100)\). |
| 2 |
1000003 |
7 |
Есть две пары A и B, таких чтобы выполнялость условие задачи: \((1,1000003)\) и \((1000003,1)\). Для этих пар, \(F(1,1000003)=F(1000003,1)=7\). |
| 3 |
9876543210 |
6 |
|
| |
|
|
Построение
Вывод формулы
Разбор случаев
Задача на реализацию
N учащихся класса, удобно пронумеровали числами от 1 до N. На линейке 1 сентября они стояли в ряд, но теперь не уверены в том, в каком порядке они стояли. Однако каждый запомнил следующий факт: абсолютную разницу между количеством учащихся, стоявших слева от этого человека, и количеством учащихся, которые стояли справа от этого человека. Согласно их отчетам, разница для человека i равна Ai . На основании этих отчетов, найдите количество возможных расстановок, в которых они стояли. Поскольку ответ может быть очень большим, выведите его по модулю \(10^9+7\). Обратите внимание, что отчеты могут быть неправильными и, следовательно, не может быть согласованного порядка. В таком случае выведите 0.
Входные данные
В первой строке задается число N (\(1<=N<=10^5\)). Во второй строке N чисел Ai (\(0<=A_i<=N-1\)).
Выходные данные
Выведите количество возможных расстановок по модулю \(10^9+7\).
Примеры
| № |
Входные данные |
Выходные данные |
Пояснение |
| 1 |
5
2 4 4 0 2 |
4 |
Возможны 4 расстановки учащихся, а именно:
2 ,1 ,4 ,5 ,3
2 ,5 ,4 ,1 ,3
3 ,1 ,4 ,5 ,2
3 ,5 ,4 ,1 ,2 |
| 2 |
7
6 4 0 2 4 0 2 |
0 |
Любая расстановка не совместима с отчетами. Поэтому ответ 0. |
| 3 |
8
7 5 1 1 7 3 5 3 |
16 |
|
| |
|
|
Квест
Задача на реализацию
Разбор случаев
Конструктив
Новый квест, в котором участники должны выбраться с территории проведения, представляет собой прямоугольник из N × M комнат. Каждая комната имеет четыре двери, ведущие в соседние комнаты, из комнат на краю прямоугольника двери ведут наружу, через эти двери можно
покинуть территорию проведения квеста.
В начале квеста в каждой комнате находится по человеку, а все двери заперты. После начала квеста организаторы дистанционно открывают в каждой комнате запирающий механизм одной из четырёх дверей. Теперь человек, находящийся в этой комнате, может открыть эту дверь и перейти
в соседнюю комнату, через другие три двери выйти из этой комнаты нельзя. При этом может оказаться так, что дверь, соединяющая две комнаты, будет отпираться только с одной стороны, тогда пройти через эту дверь можно только с той стороны, с которой она будет открываться, проходить
через дверь в обратном направлении нельзя, если в соседней комнате будет отперта не эта дверь, а какая-то другая. Если комната находится на краю территории и из этой комнаты открыта дверь наружу, то, пройдя через эту дверь, участник навсегда покидает территорию квеста.
После начала квеста и отпирания дверей участники начинают перемещаться между комнатами. Каждый участник перемещается в соседнюю открытую комнату и продолжает перемещаться до тех пор, пока не покинет территорию квеста. Однако возможна ситуация, когда некоторые участники будут бесконечно перемещаться между комнатами и никогда не выйдут наружу.
Разработчики квеста попросили Вас составить такой план отпирания дверей, при котором ровно K человек смогут выбраться наружу с территории квеста.
Входные данные
Программа получает на вход три числа N, M, K, 1 ≤ N ≤ 100, 1 ≤ M ≤ 100, 0 ≤ K ≤ NM. N и M – количество строк и столбцов в прямоугольном плане квеста, K – количество человек, которые должны выйти из квеста.
Выходные данные
Программа должна вывести план территории квеста в виде N строк, каждая из которых должна содержать M символов. Символ соответствует тому, какая дверь будет открыта в данной комнате и может быть одной из следующих заглавных английских букв: U (дверь в верхнюю по данному плану комнату), D (дверь в нижнюю комнату), L (дверь в левую комнату), R (дверь в правую комнату). Необходимо вывести один любой подходящий план решения задачи. Если ни одного подходящего плана не существует, программа должна вывести одну строчку «IMPOSSIBLE».».
Примеры
| № |
Входные данные |
Выходные данные |
Пояснение |
| 1 |
1
2
1 |
IMPOSSIBLE |
Территория квеста состоит из 1 строки и 2 столбцов. При любом
способе открытия дверей из квеста не сможет выбраться ровно один
человек. |
| 2 |
3
4
5 |
RDLD
ULUR
DURU |
Территория квеста состоит из 3 строк и 4 столбцов. Из квеста
должны выйти 5 человек. На рисунке ниже приведена картинка,
соответствующая ответу из примера. Стрелками обозначены
открытые двери, точками помечены комнаты, обитатели которых
выйдут из квеста. |
| |
|
|
Робот
Задача на реализацию
Задачи на моделирование
Разбор случаев
Некоторый заводской цех представляет собой прямоугольник размером M на N метров (1 <= M, N <= 30). Инженер-конструктор Петя создал робота, который может перемещаться по территории цеха и выполнять некоторую общественно-полезную работу. Робот может перемещаться только по плитам, размером 1 на 1 метр, которыми выложен пол цеха, и только параллельно осям координат.
У робота есть 4 регистра состояния, A, B, C и D. Каждый регистр может принимать одно из двух значений - TRUE или FALSE. На некоторых плитах цеха стоят радио-триггеры, которые переключают состояние каких-то регистров робота. Также на некоторых других плитах могут находиться радиомаяки, которые в зависимости от истинности формулы, соответствующей данному маяку, заставляют робота повернуть на 90 градусов налево или направо. В случае истинности совершается поворот направо.
Спецслужбы заинтересовались разработкой Пети, и решили проверить пригодность робота для работ в условиях радиации, под водой, в кратерах вулканов, на других планетах и много где еще. Для испытаний из цеха было вынесено все оборудование, поставлено некоторое количество радиомаяков и триггеров. Начиная с некоторой пустой плиты X0, Y0 под начальным углом A0 (0,90,180 или 270 градусов, отсчитывая от направления вверх по часовой стрелке) был запущен робот. Изначально состояния всех регистров робота - FALSE.
Аккумуляторных батарей робота хватит на K (0 < K <= 109) перемещений на соседнюю плиту. После этого он остановится. Кроме того, возможен такой вариант, что Петя неправильно расставил триггеры и маяки, поэтому на некотором шаге робот врежется в стену цеха. Необходимо определить, уцелеет ли робот после испытаний и на какой клетке он остановится в случае положительного ответа на первый вопрос.
Оси координат направлены из левого верхнего угла - точки (1,1) - соответственно вправо и вниз. M - размер цеха по горизонтали, а N - по вертикали. Количество триггеров - P - не превосходит 10000, а радиомаяков - Q - 25.
Входные данные
На первой строке входного файла записаны 8 чисел - M,N,P,Q,K,X0,Y0,A0. Далее на Р строках записаны триггеры в формате "X Y R", где R - название регистра. Далее на Q строках записаны радиомаяки в формате "X Y F", где F - булева функция от переменных A..D длиной не более 250 символов, заданная корректной формулой, причем:
- A, B, C, D, TRUE, FALSE – корректные формулы
- Если F – корректная формула, то «(F)» и «NOT F» – корректные формулы
- Если F и G – корректные формулы, то «F AND G», «F OR G» и «F XOR G» – корректные формулы
- Операция NOT имеет наивысший приоритет, остальные операции имеют одинаковые приоритеты и выполняются слева направо, т.е. A AND NOT B OR C XOR D эквивалентно (((A AND (NOT B)) OR C) XOR D)
- регистр букв не имеет значения
- корректная формула не содержит лишних пробелов
Выходные данные
В случае успешного исхода вывести координаты плиты, где остановится робот. В случае краха эксперимента вывести в выходной файл единственное число «-1».
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
8 8 1 9 420000001 3 4 180
3 3 A
3 5 FALSE
6 5 FALSE
6 2 FALSE
3 2 A
3 1 FALSE
1 1 FALSE
1 8 FALSE
2 8 FALSE
2 2 TRUE |
3 5 |
Примечание

В соответствии с рисунком, робот будет двигаться по «восьмерке» суммарной длиной 42 метра. Следовательно, прохождение 42n+1 метра эквивалентно прохождению 1 метра, т.е. робот остановится на плите с координатами
«3 5».
| |
|
|
Перевернутые родословные
Вывод формулы
Разбор случаев
Задача на реализацию
Учёный Иван Иванович изучает перевёрнутые родословные. Перевёрнутая родословная представляет собой набор людей, про каждого из которых известны либо оба его родителя, либо не известен ни один родитель. Кроме того, известно, что у всех людей из родословной есть ровно один
ребёнок, кроме одного человека, у которого детей вовсе нет. Поэтому, если пронумеровать людей целыми числами от 1 до n, то можно обозначить за si номер ребёнка человека с номером i и сказать, что si = 0 в случае, если у человека с номером i детей нет.
Будем считать, что человек a входит в родословную человека b, если либо a = b, либо если у b известны родители, и a входит в родословную одного из родителей b.
Будем считать, что произошёл перекос родословной с участием некоторого человека, если известны оба его родителя и количество людей в родословной одного из его родителей хотя бы вдвое больше, чем количество людей в родословной второго родителя.
Иван Иванович посчитал количество перекосов родословной и получил число k, но, конечно же, он делал это вручную и мог ошибиться. Помогите проверить Ивану Ивановичу его вычисления: по числам n и k скажите, существует ли родословная из n людей с k перекосами, и если существует, то приведите пример подобной родословной.
Формат входных данных
В единственной строке заданы два целых числа n и k (1 ≤ n ≤ 100 000, 0 ≤ k ≤ n) — количество людей в родословной и количество перекосов в ней.
Формат выходных данных
В первой строке выведите «YES» (без кавычек), если существует родословная с n людьми и k перекосами, и «NO» (без кавычек) в противном случае.
Если требуемая родословная существует, то во второй строке выведите n целых чисел s1, s2, . . . , sn (0 ≤ si ≤ n), задающих номера детей каждого из n человек в родословной. Если искомых родословных несколько, выведите любую.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3 0 |
YES
0 1 1 |
| 2 |
5 1 |
YES
0 1 1 3 3 |
| 3 |
3 2 |
NO |
Замечание
В первом примере подойдет единственная родословная, которую можно составить из трёх человек (человек и два его родителя).
Во втором примере подойдет следующая родословная:

В этом случае в родословную человека 1 входят пять человек (люди 1, 2, 3, 4, 5), в родословную человека 2 входит один человек (только 2), в родословную человека 3 входят три человека (3, 4, 5), в родословную человека 4 входит один человек (только 4) и в родословную человека 5 входит один
человек (только 5). В этом случае происходит перекос родословной в человеке 1.
В третьем примере можно показать, что не существует родословной из трёх людей с двумя перекосами.
| |
|
|
Подготовка к экзамену
Вывод формулы
Задача на реализацию
Среди открытого банка задач ЕГЭ по математике есть следующая: по заданным натуральным числам l, r и m вас просят найти целые числа a, b и c, каждое из которых не меньше l и не больше r, и такие, что будет существовать натуральное число n (целое число, большее нуля) такое, что
n · a + b − c = m.
Паша еще только начал готовиться к ЕГЭ и не совсем понимает, как решать подобную задачу. Помогите ему для разных вариантов этой задачи находить подходящие a, b и c.
Формат входных данных
В единственной строке заданы три целых числа l, r и m (1 ≤ l ≤ r ≤ 500 000, 1 ≤ m ≤ 1010).
Формат выходных данных
Выведите три целых числа a, b и c такие, что l ≤ a, b, c ≤ r и существует такое натуральное число n, что n · a + b − c = m. Гарантируется, что такие числа существуют. Если подходящих решений несколько, выведите любое из них.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4 6 13 |
4 6 5 |
| 2 |
2 3 1 |
2 2 3 |
Замечание
В первом примере можно выбрать n = 3, тогда n · 4 + 6 − 5 = 13 = m. Так же возможны такие ответы: a = 4, b = 5, c = 4 (при этом n = 3); a = 5, b = 4, c = 6 (при этом n = 3); a = 6, b = 6, c = 5 (при этом n = 2); a = 6, b = 5, c = 4 (при этом n = 2).
Во втором примере n = 1, тогда n · 2 + 2 − 3 = 1 = m. Число n = 0 не могло быть выбрано, так как число n обязательно должно быть натуральным.
| |
|
|
Ирригация
математика
Задача на реализацию
реализация
Мальчика Мишу с юных лет волновали вопросы доставки воды. Когда Мише было четыре года, он приносил воду для полива растений в воздушных шариках вместо вёдер, так как воду в ведре было проще расплескать. Когда Мише исполнилось шесть лет, он построил в квартире водопровод из трубочек для сока, автоматизировав тем самым поливку цветов у себя в комнате. Все полученные в школе знания Миша сразу же использовал в своих смелых изобретениях: передача воды по проводам, насос из зубочисток, кран из маминого флакончика духов — вот далеко не полный список изобретений мальчика в школьные годы.
Как известно, любому таланту надо дать возможность реализоваться, поэтому мама Миши отправила сына на инновационную олимпиаду по ирригации (ИОИ). На этой олимпиаде школьники со всех концов Берляндии соревнуются в умении доставить воду для поливки растений самыми причудливыми способами. Зная список изобретений Миши, несложно догадаться, что проведение подобной олимпиады весьма затратно, поэтому спустя n первых проведений олимпиады было решено ввести правило, по которому будет определяться место проведения соревнования в следующий год. Город для проведения олимпиады выбирается следующим образом: всего в Берляндии есть m городов, пронумерованных от 1 до m, готовых принять соревнование. Каждый год олимпиада проводится в городе, в котором она проводилась наименьшее число раз. Если таких городов несколько, то олимпиада проводится в городе с наименьшим номером среди городов с минимальным числом проведений олимпиады.
Мишина мама очень волнуется за сына, поэтому её интересует, в каком городе будет проходить олимпиада в определённые годы. Единственная информация, которой располагает мама Миши, — места проведения олимпиады в первые n лет. Помогите маме Миши, и она попросит Мишу не залить вашу квартиру.
Входные данные
В первой строке заданы три целых числа n, m и q (1 ≤ n, m ≤ 500000 , 1 ≤ q ≤ 20) — количество проведений олимпиады до введения правила, количество городов в Берляндии, готовых провести олимпиаду, и число лет, про которые маму Миши интересует место проведения олимпиады, соответственно.
В следующей строке содержится n целых чисел ai (1 ≤ ai ≤ m) — номера городов, в которых проводилась олимпиада в год i. Обратите внимание, что до принятия правила место проведения олимпиады могло выбираться произвольным образом.
В следующих q строках заданы целые числа ki (n+1 ≤ ki ≤ 1018) — номера годов, для которых маму Миши интересует место проведения олимпиады.
Выходные данные
Выведите q целых чисел. В строке с номером i выведите одно целое число — место проведения олимпиады в год ki.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
6 4 10
3 1 1 1 2 2
7
8
9
10
11
12
13
14
15
16 |
4
3
4
2
3
4
1
2
3
4 |
| 2 |
4 5 4
4 4 5 1
15
9
13
6 |
5
3
3
3 |
| |
|
|
Разделение числа
Вывод формулы
Задача на реализацию
Сегодня Дима целый день старался и выписывал на длинную бумажную ленту своё любимое целое положительное число n, состоящее из l цифр. К сожалению, лента получилась настолько длинной, что в итоге не влезла в Димин шкаф.
Чтобы справиться с этой неприятностью, Дима решил разрезать ленту на две непустые части, на каждой из которых записано целое положительное число без ведущих нулей, после чего сложить числа, написанные на получившихся частях, а полученную сумму записать на новую ленту.
Дима хочет, чтобы полученное число было как можно меньше, ведь это повышает шансы на то, что хотя бы сумма в шкаф влезет. Помогите Диме определить, какое минимальное число он может получить.
Входные данные
Первая строка содержит одно целое число l (2 ≤ l ≤ 100000) — длину любимого числа Димы.
Вторая строка содержит целое положительное число n, изначально записанное на ленте — любимое число Димы.
Число n состоит ровно из l цифр, при этом запись не содержит ведущих нулей. Также Дима гарантирует, что существует хотя бы один способ разрезать число, удовлетворяющий всем требованиям выше.
Выходные данные
Выведите одно целое число — минимальное число, которое может получить Дима.
Примечание
В первом примере Дима может разрезать число 1234567 на числа 1234 и 567. Их сумма равна 1801.
Во втором примере Дима может разрезать число 101 на числа 10 и 1. Их сумма равна 11.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
7
1234567 |
1801 |
| 2 |
3
101 |
11 |
| |
|
|
Наберите текст
Задача на реализацию
Задачи на моделирование
В новой модели сотового телефона разработчики предусмотрели только 5 кнопок: «стрелка вверх», «стрелка вниз», «стрелка вправо», «стрелка влево» и «Ok». Чтобы набрать номер телефона, на экран выводится виртуальная клавиатура в виде такой таблицы:
| 1 |
2 |
3 |
| 4 |
5 |
6 |
| 7 |
8 |
9 |
| выход |
0 |
звонок |
По ячейкам этой таблицы пользователь телефона может перемещать курсор вверх, вниз, вправо или влево. Для выбора цифры необходимо нажать кнопку «Ok». После набора всех цифр пользователь должен подвинуть курсор на ячейку «звонок» и нажать «Ok». Таблица не «зациклена» (это означает, что нажатие кнопки «вправо», например, из ячейки с цифрой 6 не приведет к перемещению курсора).
При вызове экранной клавиатуры курсор находится на кнопке с надписью «выход».
По заданному семизначному номеру телефона определите, сколько нажатий кнопок должен сделать пользователь, чтобы позвонить по этому номеру.
Входные данные
Во входном файле задан номер телефона, содержащий ровно 7 цифр.
Выходные данные
В выходной файл выведите одно число — минимальное количество нажатий суммарно на все кнопки, которое необходимо, чтобы совершить звонок по этому номеру.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
0800000 |
12 |
| 2 |
1234567 |
24 |
| |
|
|
Гирьки
Вывод формулы
Задача на реализацию
У ювелира есть весы с двумя чашками, он может определять равны ли массы грузов, лежащих на двух чашках, а если не равны – то на какой чашке лежит более лёгкий груз.
Масса ювелирного изделия, которую нужно определить ювелиру, является целым числом от 1 до N. Ювелир должен запасти набор гирек (их массы также должны быть целыми числами), используя которые ювелир может определить любую возможную массу от 1 до N. Для определения массы ювелир может производить любое число взвешиваний, может использовать все гирьки или только некоторые из них, может класть гирьки на разные чашки весов.
Определите набор гирек, содержащий минимальное возможное число гирек, используя который можно определить любую возможную целочисленную массу от 1 до N.
Программа получает на вход натуральное число N (2 ≤ N ≤ 108) – максимально допустимую массу ювелирного изделия.
Программа должна вывести несколько натуральных чисел, не превосходящих 109, – массы гирек в минимальном требуемом для решения задачи наборе (допускается использовать гирьки массой, больше, чем N, если их масса не превосходит 109).
Если задача имеет множество решений, необходимо вывести любое из них.
Примеры
| № |
Входные данные |
Выходные данные |
Пояснение |
| 1 |
3 |
2 |
Пусть x – изделие, массу которого необходимо определить. Нужно на одну чашу весов положить x, а на другую чашу весов – гирьку в 2. Если x будет легче, то x = 1, при равенстве – x = 2, если x тяжелее, то x = 3. |
| 2 |
5 |
3 4 |
Покажем, как при помощи гирек в 3 и 4 определить все массы от 1 до 5. Массы 3 и 4 можно определить при помощи равенств x = 3 и x = 4. Массу 1 можно определить при помощи равенства x + 3 = 4 (на одну чашу кладется изделие и гирька массой 3, на другую чашу – гирька массой 4). Массу 2 можно определить, например, по условию x < 3 (на одну чашу весов кладется изделие, на другую – гирька массой 3), а также проверив при помощи ранее описанного алгоритма, что x ≠ 1 . Массу 5 можно определить при помощи взвешивания x > 4. |
| |
|
|
ASCII-графика
Элементарная геометрия
Задача на реализацию
Давным-давно большинство персональных компьютеров были оборудованы видеокартами, работавшими только в текстовом режиме. Если программист хотел изобразить картинку на экране, ему приходилось использовать псевдографику или ASCII-графику. Вот пример картинки, нарисованный с ее помощью:
^..^
(OO)
/ \
()()
Вам дан многоугольник, нарисованный с помощью ASCII-графики. Ваша задача состоит в том, чтобы посчитать количество его сторон.
Картинка состоит из символов ‘.’, ‘\’ и ‘/’. Каждый символ изображает единичный квадрат картинки. Символ ‘.’ обозначает пустой квадрат, символ ‘/’ — квадрат с отрезком из левого нижнего угла в правый верхний, а символ ‘\’ — квадрат с отрезком из левого верхнего угла в правый нижний.

Входные данные
Первая строка входных данных содержит два числа h и w — высота и ширина изображения (2 ? h, w ? 100). Следующие h строк, по w символов в каждой, содержат описание многоугольника, нарисованного с помощью ASCII-графики.
Гарантируется, что картинка содержит ровно один многоугольник, не имеющий самопересечений и самокасаний.
Выходные данные
Выведите одно число — количество сторон многоугольника.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4 4
/\/\
\../
.\.\
..\/
|
8 |
| |
|
|
Локальные и глобальные переменные
Задачи на процедуры и функции
Цикл for
Задача на реализацию
Напишите процедуру с параметром n, которая выводит ёлочку с кроной высотой n
Основная программа должна содержать ввод значения переменной n и вызов процедуры
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5 |
o
ooo
ooooo
ooooooo
ooooooooo
|
| |
|
|
Свойства объектов - 1
Задача на реализацию
Хеш
В хранилище Васи находится n объектов, пронумерованных от 1 до n, у каждого из которых есть некоторое количество свойств (возможно, ни одного). Каждое свойство представлено в виде натурального числа от 1 до 109.
Проанализировав устройство своего хранилища, Вася решил, что оно должно поддерживать две операции:
- Удаление устаревшего свойства c. При удалении свойства, оно удаляется у всех объектов, которым принадлежит.
Если указанного свойства не существует, ничего делать не нужно.
- Найти количество оставшихся свойств у объекта с номером r.
Васе очень нужно реализовать эту функциональность, и он обратился к вам за помощью. Помогите ему - напишите программу, которая будет поддерживать обе операции, нужные Васе.
Формат входных данных
В первой строке входного файле содержится число n - количество объектов в хранилище Васи (1 <= n <= 105). В i-й из следующих n строк содержится описание свойств объекта с номером i: сначала дано число ki - количество свойств у i-го объекта, а затем через пробел даны ki чисел pi,j - свойства i-го объекта (0 <= ki <= 100, 1 <= pi,j <= 109).
Все объекты пронумерованы от 1 до n в порядке, представленном во входных данных. Гарантируется, что общее количество свойств у всех объектов не превосходит 105. Также гарантируется, что для каждого i все pi,j различны.
В n + 2 строке содержится число q - количество запросов к хранилищу Васи (1 <= q <= 105).
В j-й из следующих q строк содержится информация об j-м запросе:
- c, если из хранилища требуется удалить устаревшее свойство c (1 <= c <= 109);
? r, если требуется найти количество оставшихся свойств у объекта с номером r.
Формат выходных данных
Для всех запросов на нахождение количества оставшихся свойств у объекта, в отдельных строках, в порядке их поступления для каждого запроса выведите это количество.
| Ввод |
Вывод |
2
3 1 2 4
3 2 3 5
12
- 1
? 1
? 2
- 2
? 1
? 2
- 5
? 1
? 2
- 6
? 1
? 2 |
2
3
1
2
1
1
1
1 |
Замечание
Свойство 1 есть только у первого объекта, поэтому после его удаления у первого объекта остается 2 свойства, а у второго все еще 3.
Свойство 2 есть у обоих объектов, поэтому оно удаляется у обоих объектов, у первого объекта остается 1 свойство, а у второго - 2.
Свойство 5 есть только у второго объекта, поэтому после его удаления у обоих объектов остается 1 свойство.
Свойства 6 нет ни у одного объекта, поэтому его удаление не меняет количество свойств у объектов.
| |
|
|
Свойства объектов - 2
Задача на реализацию
Задачи на моделирование
В хранилище Васи находится n объектов, пронумерованных от 1 до n, у каждого из которых есть некоторое количество свойств (возможно, ни одного). Каждое свойство представлено в виде натурального числа от 1 до 109.
Проанализировав устройство своего хранилища, Вася решил, что оно должно поддерживать две операции:
- Удаление устаревшего свойства c. При удалении свойства, оно удаляется у всех объектов, которым принадлежит. Если указанного свойства не существует, ничего делать не нужно.
- Найти количество удаленных свойств у объекта r
Васе очень нужно реализовать эту функциональность, и он обратился к вам за помощью. Помогите ему - напишите программу, которая будет поддерживать обе операции, нужные Васе.
Формат входных данных
В первой строке входного файле содержится число n - количество объектов в хранилище Васи (1 <= n <= 105). В i-й из следующих n строк содержится описание свойств объекта с номером i: сначала дано число ki - количество свойств у i-го объекта, а затем через пробел даны ki чисел pi,j - свойства i-го объекта (0 <= ki <= 100, 1 <= pi,j <= 109).
Все объекты пронумерованы от 1 до n в порядке, представленном во входных данных. Гарантируется, что общее количество свойств у всех объектов не превосходит 105. Также гарантируется, что для каждого i все pi,j различны.
В n + 2 строке содержится число q - количество запросов к хранилищу Васи (1 <= q <= 105).
В j-й из следующих q строк содержится информация об j-м запросе:
- c, если из хранилища требуется удалить устаревшее свойство c (1 <= c <= 109);
? r, если требуется найти количество оставшихся свойств у объекта с номером r.
Формат выходных данных
Для всех запросов на нахождение количества оставшихся свойств у объекта, в отдельных строках, в порядке их поступления для каждого запроса выведите это количество.
| Ввод |
Вывод |
2
3 1 2 4
3 2 3 5
12
- 1
? 1
? 2
- 2
? 1
? 2
- 5
? 1
? 2
- 6
? 1
? 2 |
1
0
2
1
2
2
2
2 |
Замечание
Свойство 1 есть только у первого объекта, поэтому после его удаления у первого объекта 1 удаленное свойство, а у второго все еще 0.
Свойство 2 есть у обоих объектов, поэтому оно удаляется у обоих объектов, у первого объекта теперь 2 удаленных свойства, а у второго 1.
Свойство 5 есть только у второго объекта, поэтому после его удаления у обоих объектов становится 2 удаленных свойства.
Свойства 6 нет ни у одного объекта, поэтому его удаление не меняет количество удаленных свойств у объектов.
| |
|
|
Удаление и вставка
Строки
Задача на реализацию
Дана строка. Получите новую строку, вставив между двумя символами исходной строки символ *. Выведите полученную строку.
Входные данные
Вводится строка.
Выходные данные
Выведите ответ на задачу.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
Pascal |
P*a*s*c*a*l |
| |
|
|
Задача на удаление
Строки
Задача на реализацию
Дана строка. Удалите из этой строки все символы @.
Входные данные: вводится строка.
Выходные данные: выведите ответ на задачу.
| № |
Входные данные |
Выходные данные |
| 1 |
Bilbo.Baggins@bagend.hobbiton.shire.me |
Bilbo.Bagginsbagend.hobbiton.shire.me |
Замечание: попробуйте использовать метод Replace(Char, Char);
| |
|
|
Замена подстрок в строке
Строки
Задача на реализацию
Дана строка. Замените в этой строке все цифры 1 на слово one.
Входные данные: вводится строка.
Выходные данные: выведите ответ на задачу (строку).
Пример.
| Входные данные |
Выходные данные |
| 1+1=2 |
one+one=2 |
| |
|
|
Сложение и умножение
Строки
Задача на реализацию
В первой строке задается имя пользователя
Выведите на экран:
1) в первой строке - приветствие пользователю в виде "Hello, имя!" (без кавычек)
2) во второй строке - выведите имя пользователя 10 раз через пробел.
| |
|
|
Локальные и глобальные переменные
Задачи на процедуры и функции
Цикл for
Задача на реализацию
Напишите процедуру с параметром n, которая выводит ёлочку с кроной высотой n
Основная программа должна содержать ввод значения переменной n и вызов процедуры
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5 |
o
ooo
ooooo
ooooooo
ooooooooo
|
| |
|
|
Пропуск в общежитие - 2
Задача на реализацию
Алгоритмы обработки
На входе в общежитие стоит турникет. Чтобы через него пройти, требуется приложить пропуск. Пропуск надо прикладывать и при входе в общежитие и при выходе из него. Для того, чтобы исключить несанкционированные проходы, пропуск не работает два раза подряд вход и два раза подряд на выход.
Однако, хитрые студенты придумали, как обойти это ограничение. Чтобы войти или выйти вдвоем по одному пропуску, они прикладывают его с нужной стороны, потом с противоположной, но никто не проходит, а затем снова с нужной.
Начальник охраны решил разобраться с данной проблемой и сделать выговоры всем нарушителям. По каждому событию входа/выхода есть запись в журнале событий. Он считает нарушителями тех владельцев пропусков, у которых произошло три события вида выход-вход-выход менее чем за dt минут.
Вам дан журнал событий турникета. Требуется вывести список тех студентов, кому будет сделан выговор.
Входные данные
В первой строке задано два числа n и dt — число записей в журнале событий турникета и ограничение времени, выбранное начальником охраны, соответственно (1≤n≤1000, 3≤dt≤1440).
В следующих nn строках даны записи в журнале событий в хронологическом порядке. Запись в журнале состоит из трех частей, разделенных пробелом:
- Время события в формате hh:mm
- Фамилия студента, состоящая из не более чем 20 букв латинского алфавита, первая из которых заглавная.
- Тип события: in, если произошел вход и out, если произошел выход.
Гарантируется, что не существует двух событий, которые происходят одновременно. Также гарантируется, что у любых двух разных студентов разные фамилии и у одного студента не бывает двух событий одного типа подряд.
Выходные данные
В первой строке выведите число нарушителей. После чего выведите фамилии нарушителей в лексикографическом порядке.
| Ввод |
Вывод |
6 10
01:23 Petrov in
01:24 Ivanov out
01:25 Petrov out
01:27 Ivanov in
01:32 Petrov in
01:33 Ivanov out |
1
Ivanov
|
6 10
01:23 Petrov in
01:24 Ivanov out
01:25 Petrov out
01:27 Ivanov in
01:33 Petrov in
01:34 Ivanov out |
0 |
| |
|
|
Онлайн компилятор
Язык программирования
Задача на реализацию
1. Напишите исходный код программы.
2. Задайте исходные данные.
3. Посмотрите результат работы программы на заданных исходных данных.
| |
|
|
Книги в библиотеке
Линейные алгоритмы
Задача на реализацию
В библиотеке на стеллажи расставляют книги. Книги ставятся на полки ровно по K штук на каждую, если полка не может быть заполнена полностью, она остается пустой. В каждом стеллаже по М полок. Последний стеллаж может быть заполнен не полностью. Всего имеется N книг. Сколько всего понадобится стеллажей, сколько полок будет заполнено на последнем стеллаже и сколько книг останется не выставлено на стеллажи (выставить нужно как можно больше книг)? Написать программу: вводятся три числа целых N, M, K в одной строке; вывести три числа в одной строке - сначала количество потребовавшихся стеллажей, затем количество заполненных книгами полок на последнем стеллаже, а затем количество не выставленных книг
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
50 70 8 |
1 6 2 |
| |
|
|
Гирлянды из лампочек
Вычисление по заданной формуле
Задача на реализацию
Из цветных лампочек комплектуют новогодние гирлянды. Сначала лампочки связываются в "снежинку" ровно по K штук в каждой, а потом "снежинки" - в гирлянды, причем каждая гирлянда вмещает не более M "снежинок". Последняя гирлянда (только она одна) может быть короче других (включать в себя меньше "снежинок", чем остальные). Всего имеется N лампочек. Сколько всего получится гирлянд, сколько "снежинок" будет в последней гирлянде и сколько лампочек останется неиспользованными (нужно использовать как можно больше лампочек)? Написать программу: вводятся три числа целых N, M, K в одной строке; вывести три числа в одной строке - сначала количество получившихся гирлянд, затем количество "снежинок" в последней гирлянде, а затем количество неиспользованных лампочек
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
35 3 4 |
3 2 3 |
| |
|
|
Локальные и глобальные переменные
Задачи на процедуры и функции
Цикл for
Задача на реализацию
Напишите процедуру с параметром n, которая выводит ёлочку с кроной высотой n.
Основная программа должна содержать ввод значения переменной n и вызов процедуры.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
5 |
o
ooo
ooooo
ooooooo
ooooooooo
|
| |
|
|
Операнды
Задача на реализацию
Разбор случаев
Алина выписала на доске \(n + 1\) цифру, каждая из которых от \(1\) до \(9\). Даша поставила между каждой парой соседних цифр знак одной из арифметических операций <<+>>, <<->>, <<*>> и <</>> (плюс, минус, умножить, целочисленное деление). Затем девочки отправились в столовую на обед.
Вернувшись, они обнаружили, что с доски все стерто, к счастью Даша смогла вспомнить, какие знаки и в каком порядке были расставлены. Также девочки считают, что результатом применения операций было большое число.
Они просят вас зная последовательность знаков, расставить цифры от \(1\) до \(9\) между ними так, чтобы итоговый результат был максимальным.
Формат входных данных
В первой строке дано число \(n\), число знаков, которые написала Даша (\(1 \le n \le 1000\)).
Во второй строке находится \(n\) знаков арифметических операций <<+>>, <<->>, <<*>> и <</>> (без кавычек).
Формат выходных данных
Выведите в единственной строке последовательность из \(n + 1\) цифры, таким образом, чтобы при расстановке между ними знаков итоговый результат был максимальным.
Если возможных решений несколько, разрешается вывести любое.
| |
|
|
Конвертирование
Строки
Задача на реализацию
Несмотря на большую известность полководца и диктатора, игравшего большую роль в политической и военной истории Древнего Рима, Цезарь был еще писателем и литератором. Для его сочинений характерны простота и ясность стиля написания, поэтому они считаются классикой древнеримской литературы и используются для обучения латинскому языку.
А мы пока поиграем со строчками.
Дана строка S, в которой выделили подстроку, состоящую из символов с i-го по j-й включительно (символы строки S нумеруются с единицы) и поменяли местами i-й символ с j-м, (i+1) с (j-1) и так далее (конвертировали подстроку). Выведите строку S после внесенных изменений.
Входные данные
В первой строке содержится строка S, длиной не более 1000 символов, во второй – числа i и j (\(i <= j\)).
Выходные данные
Выведите ответ на задачу.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
vjhoamkts
7 8 |
vjhoamtks |
| |
|
|
Период строки
Строки
Задача на реализацию
Z-функция. Префикс-функция
Дана непустая строка s. Нужно найти такое наибольшее число k и строку t, что s совпадает со строкой t, выписанной k раз подряд.
Ограничение времени - 1 секунда.
Входные данные
Дана одна строка длины N, \(0 < N <= 10^6\), состоящая только из маленьких латинских букв.
Выходные данные
Выведите одно число - наибольшее возможное k.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
aaaaa |
5 |
| 2 |
abcabcabc |
3 |
| 3 |
abab |
2 |
| |
|
|
Удаление и вставка
Строки
Задача на реализацию
Дана строка. Получите новую строку, вставив между двумя символами исходной строки символ *. Выведите полученную строку.
Входные данные
Вводится строка.
Выходные данные
Выведите ответ на задачу.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
Python |
P*y*t*h*o*n |
| |
|
|
Задача из ЕГЭ
Задача на реализацию
Простые задачи на перебор
Андрей готовился к ЕГЭ по информатике и встретил в демо-версии ЕГЭ 2015 года такую задачу:
Автомат получает на вход четырёхзначное число. По этому числу строится новое число по следующим правилам.
1. Складываются первая и вторая, а также третья и четвёртая цифры исходного числа.
2. Полученные два числа записываются друг за другом в порядке убывания (без разделителей).
Пример. Исходное число: 3165. Суммы: 3+1 = 4; 6+5 = 11. Результат: 114.
Укажите наименьшее число, в результате обработки которого автомат выдаст число 1311.
Андрей решил, что для самопроверки он напишет программу, которая решает подобную задачу. Мы думаем, что вы тоже с этим справитесь.
Программа получает на вход некоторое натуральное число N, которое может содержать две, три или четыре цифры.
Программа должна вывести такое наименьшее целое четырёхзначное число K, после применения к которому описанного выше алгоритма получается число N. Если же такого числа не существует, программа должна вывести число 0.
| |
|
|
Поле для игры
Задача на реализацию
Задачи на моделирование
Петя создает поле для своей новой игры. Поле разделено на клетки и представляет собой прямоугольник размером N на M клеток. Пусть клетки имеют координаты от 1 до N слева направо по горизонтали и от 1 до M снизу вверх по вертикали.
На этом поле Петя уже разместил супермаркет, который представляет собой прямоугольник размером C на D клеток (C –– размер по горизонтали, D –– по вертикали), и нижняя левая клетка супермаркета имеет координаты A, B на игровом поле (см. примеры и рисунки). Теперь Пете нужно разместить на том же игровом поле здание биржи. Здание биржи представляет собой прямоугольник размером E на F клеток (E –– по горизонтали, F –– по вертикали). Естественно, что здание биржи должно полностью располагаться на игровом поле и не должно иметь общих клеток с супермаркетом (но может касаться его).
Сколькими способами Петя сможет разместить здание биржи?
Входные данные
Вводятся числа N, M, A, B, C, D, E, F, каждое в отдельной строке. Числа удовлетворяют следующим условиям: 1 ≤ N ≤ 100, 1 ≤ M ≤ 100, 1 ≤ A ≤ N, 1 ≤ B ≤ M, 1 ≤ A + C - 1 ≤ N, 1 ≤ B + D - 1 ≤ M, 1 ≤ E ≤ N, 1 ≤ F ≤ M.
Выходные данные
Выведите количество способов разместить здание биржи.
| Ввод |
Вывод |
6
5
2
3
3
2
1
2 |
15 |
4
4
2
2
3
2
2
2
|
0 |
6
5
1
1
3
3
3
3 |
3 |
Примечание
Рисунки ниже соответствуют приведенным примерам. На рисунках серым показано здание супермаркета. Точками отмечены варианты размещения нижнего левого угла здания биржи.

| |
|
|
Переливания
Вывод формулы
Задача на реализацию
Имеется 10 колб с водой и известен объем воды в каждой из них. За одно «касание» можно взять одну колбу и часть воды (или всю воду) из этой колбы разлить по одной или нескольким другим колбам в любом количестве. За какое наименьшее количество «касаний» можно уравнять объемы воды во всех колбах? Каждая колба может вместить любой объем воды.
Формат входных данных
Программа получает на вход 10 целых чисел ai , каждое записанное в отдельной строке — объем воды в каждой из колб. Все числа — целые, от 0 до 100.
Формат выходных
данных Выведите одно целое число — минимальное количество «касаний», за которое можно уравнять объемы воды во всех колбах.
| Ввод |
Вывод |
30
26
2
3
4
5
6
7
8
9
|
2 |
Примечание В примере можно из первой колбы перелить 20 во вторую, оставляя в первой колбе 10. Затем из второй колбы разлить воду по всем остальным колбам так, чтобы в каждой из колб оказалось по 10.
| |
|
|
Заработная плата
Вывод формулы
Задача на реализацию
В некоторой компании работают три сотрудника — Алексей, Виктор и Сергей. Их месячный оклад составляет A, B и C рублей соответственно. При этом Алексей работает на полную ставку, а Виктор и Сергей — на половину ставки, то есть работают вдвое меньше, чем Алексей.
По итогам месяца директор компании хочет распределить между этими сотрудниками премиальный фонд, который составляет N рублей. При этом директор хочет распределить премиальный фонд таким образом, чтобы итоговая зарплата (сумма оклада и премии) у этих сотрудников оказалась пропорциональна проведённому на работе времени, то есть зарплата Алексея должна оказаться ровно в два раза больше, чем зарплата Виктора и Сергея. Более формально, если премия Алексея составит x рублей, премия Виктора — y рублей, премия Сергея — z рублей, то A + x = 2 (B + y) = 2 (C + z), x + y + z ≤ N. При этом бухгалтерия требует, чтобы размер премии (как и размер оклада) выражался целым числом рублей, а директор хочет распределить максимально большую часть премиального фонда, то есть сумма x + y + z должна быть максимально возможной, не превышая при этом N.
Напишите программу, которая определит, какую премию нужно назначить каждому из сотрудников.
Программа получает на вход сначала три целых числа A, B, С, записанные в отдельных строках, — размеры окладов Алексея, Виктора и Сергея (A > 0, B > 0, С > 0). В четвёртой строке входных данных записано одно целое число N — размер премиального фонда (N ≥ 0).
Программа должна вывести три числа — размер премии Алексея, Виктора и Сергея. Если премиальный фонд нельзя распределить так, чтобы выполнялись требуемые условия, программа должна вывести одно число 0.
| Ввод |
Вывод |
Примечание |
7
3
4
12 |
5
3
2 |
С учетом премии зарплата Алексея составит 12 рублей, Виктора и Сергея — 6 рублей. |
20
10
11
2 |
0 |
Добиться нужного соотношения премиальных выплат невозможно. |
| |
|
|
Лифт в бизнес-центре - 2
Вывод формулы
Задача на реализацию
В прошлом году на муниципальном этапе была задача про сотрудников бизнесцентра, которые вечером выходят с работы. Теперь решите задачу про сотрудников бизнесцентра, которые утром приходят на работу.
Бизнес-центр представляет собой N-этажное здание, этажи пронумерованы от 1 до N снизу вверх. На каждом этаже работает ровно один сотрудник. Все сотрудники утром приезжают на парковку, которая расположена в подвальном помещении, на один этаж ниже первого. Бизнес-центр оборудован лифтом, который вмещает неограниченное число людей, но вредный лифтёр сегодня готов отвезти всех сотрудников только на один какой-то этаж.
У каждого сотрудника есть выбор: он может пойти вверх пешком по лестнице, на подъём на один этаж при этом будет уходить A секунд. Либо он может сесть в лифт, который отвезёт всех сотрудников на какой-то выбранный ими вместе этаж. Выйдя из лифта, сотрудник может подняться до своего этажа (также тратя A секунд на подъём на один этаж), либо спуститься до нужного этажа вниз, тратя B секунд на спуск на один этаж. Лифт тратит C секунд на подъём на один этаж.
Определите минимальное время, за которое все сотрудники разойдутся по своим этажам, если они наилучшим образом выберут этаж, на который едет лифт, и свою стратегию поведения (подниматься по лестнице или ехать на лифте, а затем идти по лестнице).
Первая строка входных данных содержит число N – количество этажей в бизнесцентре. Следующие три строки содержат числа A, B, С – время, необходимое сотруднику на подъём на один этаж, на спуск на один этаж и время, необходимое лифту на подъём на один этаж. Все числа – целые положительные, не превосходящие 2×109 , при этом A ≥ B, A ≥ С. Программа должна вывести единственное целое число – минимальное время, за которое все сотрудники могут добраться до своего этажа.
| Ввод |
Вывод |
Примечание |
6
20
10
5 |
45 |
В здании 6 этажей. Сотрудник поднимается на один этаж за 20 секунд, спускается за 10 секунд. Лифт поднимается на один этаж за 5 секунд. Чтобы быстрее всем добраться до мест, лифт едет на 5-й этаж за 25 секунд. Сотрудник, который работает на 6-м этаже, выходит из лифта и поднимается за 20 секунд, всего его путь занимает 45 секунд. Сотрудник, работающий на 3-м этаже, едет на лифте и спускается на 2 этажа, это также занимает 45 секунд. Сотрудники с 4 и 5-го этажей также едут на лифте, их путь будет быстрее 45 секунд. На 1 и 2-й этажи сотрудники поднимаются пешком по лестнице за 20 и 40 секунд соответственно. Итого все сотрудники добираются до своих этажей не более чем за 45 секунд. |
| |
|
|
Декодирование сообщения
Строки
Задача на реализацию
Разбор случаев
Во время последней секретной операции Капитану Марвел удалось выкрасть закодированное
секретное сообщение скруллов — строку s. Однако, в закодированном виде никакой полезной информации оно из себя не представляет, поэтому его непременно нужно раскодировать.
Несмотря на развитость скруллов, их система кодирования сообщений проста и общеизвестна:
• Перед кодированием сообщения выбирается цифра d (0 <= d <= 9)
• Символы сообщения рассматриваются слева направо
• У каждого символа сообщения вычисляется его ASCII-код (например, у «a» он равен 97, у
«b» — 98, у «z» — 122)
• Если код трехзначный, он дописывается к текущей закодированной строке как есть, если же
код двузначный, к нему в случайное место добавляется цифра d и полученный результат
дописывается к текущей закодированной строке (например, если d = 3, а текущая буква —
«a», к текущей закодированной строке могут дописатсья числа 397, 937 или 973)
• После обработки всех букв, результатом считается полученная закодированная строка
Число d обычно передается вместе с сообщением, но Капитану Марвел не удалось его найти. Однако, она точно знает, что исходное сообщение состояло только из строчных и заглавных латинских
букв. Она понимает, что без числа d раскодировать сообщение однозначно может не получиться, поэтому для начала хочет посчитать, сколько существует различных строк t, состоящих из строчных
и заглавных латинских букв, таких, что, закодировав их, получится строка s. Так как наша героиня
не может быть полностью уверена, что сообщение было перехвачено полностью, вполне возможно,
что его невозможно декодировать ни одним способом.
Помогите нашей героине — найдите количество этих строк по модулю 109 + 7.
Формат входных данных
В единственной строке содержится закодированная строка s, выкраденная Капитаном Марвел
(3 <= |s| <= 105). Гарантируется, что строка s состоит только из цифр, а также что ее длина кратна 3.
Формат выходных данных
В единственной строке выведите одно число — количество различных строк, состоящих из строчных и заглавных латинских букв, которые кодируются в строку s, по модулю 109 + 7.
| Ввод |
Вывод |
| 988 |
2 |
| 100905 |
1 |
| 600 |
0 |
Замечание
В первом примере закодированную строку можно получить из «b», если d = 8, а также из «X», если d = 9.
Во втором примере закодированную строку можно получить только из «dZ» при d = 5.
| |
|
|
Зл 9.31
Строки
Задача на реализацию
Из слова virus путем замены его букв получить слово fokus
Пример входных и выходных данных
| № теста |
Входные данные |
Выходные данные |
| 1 |
virus |
fokus |
| |
|
|
Зл 9.29
Строки
Задача на реализацию
Дано слово клоун. Путем "вырезок" и "склеек" его букв получить слова уклон, кулон и колун.
Результирующие слова выводить в столбик.
Пример входных и выходных данных
| № теста |
Входные данные |
Выходные данные |
| 1 |
клоун |
уклон
кулон
колун |
| |
|
|
Зл 9.28
Строки
Задача на реализацию
Дано слово трос. Путем "вырезок" и "склеек" его букв получить слова сорт, торс и рост.
Результирующие слова выводить в столбик.
Пример входных и выходных данных
| № теста |
Входные данные |
Выходные данные |
| 1 |
трос |
сорт
торс
рост
|
| |
|
|
Вося и Доша
Вывод формулы
Задача на реализацию
Папа Воси покупал ёлочку 31 декабря, поэтому ему впихали последнюю и очень странную. У этой ёлочки всего 2 ветки, и каждая из них разветвляется ещё на две ветки, и эти ветки ещё на две, и ещё, и ещё... и так N раз.
Вося захотел повесить на бедное дерево свои любимые ёлочные игрушки: разноцветные шарики с красивой надписью "С++". Но Восе удобно вешать свои шарики только на "конечные" веточки (веточки, которые не разветвляются), и ему даже не лень стало из сосчитать. В итоге Вося повесил на ёлочку K шариков и пошёл помогать маме стругать оливье.
Тогда до ёлочки добралась его сестра, начинающий математик Доша. Она захотела украсить ёлочку мишурой, наматывая её на каждую ветку (одна мишура на одну ветку). Считать она, однако, умеет только до 100, поэтому позвонила своему другу, то есть вам, с просьбой сказать, сколько мишуры ей нужно.
Считайте, что вы следили за этой ёлочкой, поэтому знаете и N, и K (0 < N, K <= 10^9). Помогите Доше как можно быстрее, ведь ей пора бежать за тазиком для оливье.
(c) Неверов З., Дзензилюк И., Щипунова Е., 2018 г.
| |
|
|
Очередная задача про запросы в массиве
Задача на реализацию
Структуры данных
Вам дается массив a размера n и q запросов к нему. Есть запросы двух типов:
-
1 li ri — осуществить циклический сдвиг отрезка [li, ri] вправо. То есть, для каждого такого x, что li ≤ x < ri, ax + 1 становится равным прежнему значению ax, а ali становится равным прежнему значению ari;
-
2 li ri — перевернуть отрезок [li, ri].
Необходимо вывести массив после обработки всех запросов.
Входные данные
В первой строке записаны два целых числа n и q (1 ≤ n, q ≤ 2·105).
Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).
Дальше идут q строк. В i-й из них записаны три целых числа ti, li, ri, где ti — тип i-го запроса, [li, ri] — отрезок, на котором запрос выполняется (1 ≤ ti ≤ 2, 1 ≤ li ≤ ri ≤ n).
Выходные данные
Выведите m чисел, i-е из которых равно числу на позиции bi после обработки всех запросов.
|
Ввод |
Вывод |
|
6 3
1 2 3 4 5 6
2 1 3
2 3 6
1 1 6
|
1 3 2 6 5 4 |
(c) Курбатов Е., 2018
| |
|
|
Вычислитель
Задачи на моделирование
Задача на реализацию
Дана блок-схема алгоритма. Какое целое положительное число w необходимо подать на вход, чтобы после завершения алгоритма получилось значение s ? В ответе укажите целое число. Примечание. Операция mod вычисляет остаток от деления первого аргумента на второй. Операция div вычисляет частное от целочисленного деления первого аргумента на второй.
| |
|
|
Огромное число
Системы счисления
Задача на реализацию
Вася получил длинную последовательность из цифр следующим образом. Он брал подряд натуральные числа, начиная с 1, переводил их в четверичную систему счисления и записывал результаты перевода друг за другом. Вот начало этой последовательности:
123101112132021222330313233100…
Вася остановился только тогда, когда дописал в конец последовательности четверичную запись числа 102310. Затем он представил, что это одно большое число, записанное в четверичной системе счисления, и перевел его в шестнадцатеричную систему счисления.
Определите, какая шестнадцатеричная цифра стоит в этом числе на a-ой позиции, считая слева направо от начала числа. В ответе укажите эту шестнадцатеричную цифру.
| |
|
|
Тяжелая, вариант-2
Задача на реализацию
Задачи на моделирование
Гриша пишет дипломную работу на тему автостоянок в Берляндии. В ходе дипломной работы ему потребовалось решать следующую задачу.
Машины в Берляндии представляют собой отрезки длинной 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 |
1 |
|
4 30 3 1
24 5 11 18 |
1 |
|
2 20 3 1
7 10 |
0 |
В данном примере машины стоят вплотную, и между ними нельзя поставить никакую машину. |
| |
|
|
Формальное исполнение алгоритма, заданного на естественном языке или для конкретного исполнителя с заданным набором команд
Задача на реализацию
Задачи на моделирование
Цепочки цифр (строки) создаются по следующему правилу:
Первая строка состоит из двух цифр «1».
Каждая из последующих цепочек создается такими действиями: берется цифра, на единицу большая максимальной цифры, использовавшейся в предыдущей строке.
Эта цифра вставляется в начало, в конец и между всеми цифрами предыдущей строки.
Вот первые 4 строки, созданные по этому правилу:
(1) 11
(2) 21212
(3) 32313231323
(4) 43424341434243414342434
Таким образом, было построено еще 5 строк и в результате получена строка, содержащая цифры от 1 до 9 и состоящая из 767 цифр.
Напишите через пробел сначала цифру, стоящую на a позиции от начала, а затем на b позиции от начала. a и b считываются с клавиатуры (записаны в одной строке через пробел, номер позиции от начала отсчитывается с 1).
| |
|
|
Алгоритмизация и программирование
Задача на реализацию
Дан фрагмент программы:

Операции MOD, mod и функция ост_дел вычисляют остаток от деления первого аргумента на второй. Операции \, div и функция цел_дел осуществляют целочисленное деление. Какое минимальное значение целочисленной переменной X должно было быть перед началом выполнения этого фрагмента, если после его выполнения получилось значение R=A?, где А - вводится с клавиатуры.
В ответе укажите целое число.
| |
|
|
Алгоритмизация и программирование
Задачи на моделирование
Строки
Задача на реализацию
Дана исходная последовательность цифр: 1234
Задан алгоритм преобразования последовательности, на каждом шаге которого выполняются следующие операции:
1. В конец последовательности, имеющейся перед выполнением шага, дописывается ее копия, но развернутая зеркально (цифры записываются в обратном порядке).
2. В конце получившейся последовательности удаляется количество цифр, равное номеру шага выполнения алгоритма.
Ниже приведены результаты выполнения первых двух шагов алгоритма:
1: 1234432
2: 123443223443
Определите, какие цифры будут на A-ой, B-ой и C-той позиции от начала последовательности, которая получилась после выполнения 8-ого шага алгоритма. В ответе укажите через пробел три цифры: сначала цифру, которая стоит на А-ой позиции, затем цифру, которая стоит на В-ой позиции и затем цифру, которая стоит на С-той позиции. A, B и C задаются с клавиатуры.
| |
|
|
27031
Разные системы счисления
Задача на реализацию
Сколько существует таких натуральных чисел в диапозоне от a до b, что их запись в шестнадцатеричной системе счисления будет иметь ровно две значащих цифры, а в восьмеричной системе счисления – ровно три значащих цифры?
| |
|
|
На связи
Строки
Задача на реализацию
Недавно Владимир зарегистрировался в новой социальной сети «На связи». Но как только он решил написать личное сообщение своей девушке Даше, как обнаружил, что в сообщениях нельзя использовать цифры.
Владимир, как истинный программист, решил заменить все цифры в своем сообщении на их названия на английском языке:
0 - zero
1 - one
2 - two
3 - three
4 - four
5 - five
6 - six
7 - seven
8 - eight
9 - nine
Таким образом Владимир не нарушает правил социальной сети и не изменяет смысл сообщения. Однако у Владимира не очень хорошо с английским языком, поэтому он просит вас помочь ему.
Формат ввода
Формат вывода
Выведите измененное сообщение Владимира, в котором каждая цифра заменена на её название на английском языке.
Пример
| Ввод |
Вывод |
Dashka, I love you!!! <3
|
Dashka, I love you!!! <three
|
| |
|
|
Легкая, вариант -2
Задача на реализацию
Простые задачи на перебор
В Берляндии каждый автомобиль имеет регистрационный номер. Автомобильные номера в Берляндии имеют следующий вид: LDDLDDL, где символ L обозначает строчную латинскую букву, а D цифру.
Филипп устроился работать в службу регистрации автомобильных номеров. По своей неопытности в первый же день работы Филипп разлил на стопку номеров кофе. У некоторых номеров оказался залит второй блок цифр (цифры на позициях 5 и 6).
Филипп считает, что все номера в Берляндии уникальны, поэтому он хочет быстро подобрать все залитые цифры, так чтобы среди всех номеров не было двух одинаковых. Задача показалась ему нерешаемой, и он попросил вас помочь ему.
Входные данные
В первой строке записано натуральное число n, не превосходящее 1000 — количество номеров в стопке.
В следующих n строках находятся n регистрационных номеров, в i+1-й строке i-й номер, в описанном выше формате. На месте залитых цифр находятся знаки вопросов.
Гарантируется, что знаки вопроса могут находиться только на месте цифр из второго блока цифр, причем либо на позициях обеих цифр, либо ни на одной из позиций.
Выходные данные
Первая строка должна содержать NO, если в стопке были одинаковые номера. Иначе первая строка должна содержать YES, а далее n строк должны содержать номера из стопки — по одному в каждой строке, причем i+1-я строка должна содержать i-й номер. Номера должны удовлетворять принятому в Берляндии формату в том же порядке, что и во входном файле.
Если ответов несколько — разрешается вывести любой.
Обратите внимание, что Филипп хочет восстановить только залитые цифры, то есть он должен заменить только знаки вопросов цифрами, другие символы в номерах измениться не должны.
Пример входных и выходных данных
| Ввод |
Вывод |
4
a10a10c
a30b??c
a30b??c
x70r??r |
YES
a10a10c
a30b10c
a30b22c
x70r37r |
3
a00b10c
a00b10c
c02y03x |
NO |
2
a99a??b
a99a??b |
YES
a99a11b
a99a22b |
| |
|
|
Легкая, вариант -1
Задача на реализацию
реализация
В Берляндии каждый автомобиль имеет регистрационный номер. Автомобильные номера в Берляндии имеют следующий вид: LDDLDDL, где символ L обозначает строчную латинскую букву, а D цифру.
Филипп устроился работать в службу регистрации автомобильных номеров. По своей неопытности в первый же день работы Филипп разлил на стопку номеров кофе. У некоторых номеров оказался залит первый блок цифр (цифры на позициях 2 и 3).
Филипп считает, что все номера в Берляндии уникальны, поэтому он хочет быстро подобрать все залитые цифры, так чтобы среди всех номеров не было двух одинаковых. Задача показалась ему нерешаемой, и он попросил вас помочь ему.
Формат входных данных
В первой строке входных данных записано натуральное число n, не превосходящее 1000 — количество номеров в стопке.
В следующих n строках находятся n регистрационных номеров, в i+1-й строке i-й номер, в описанном выше формате. На месте залитых цифр находятся знаки вопросов.
Гарантируется, что знаки вопроса могут находиться только на месте цифр из первого блока цифр, причем либо на позициях обеих цифр, либо ни на одной из позиций.
Формат выходных данных
Первая строка выходного данных должна содержать NO, если в стопке были одинаковые номера. Иначе первая строка должна содержать YES, а далее n строк должны содержать номера из стопки — по одному в каждой строке, причем i+1-я строка должна содержать i-й номер. Номера должны удовлетворять принятому в Берляндии формату в том же порядке, что и во входных данных.
Если ответов несколько — разрешается вывести любой.
Обратите внимание, что Филипп хочет восстановить только залитые цифры, то есть он должен заменить только знаки вопросов цифрами, другие символы в номерах измениться не должны.
| Ввод |
Вывод |
4
a10a10c
a??b30c
a??b30c
x??r70r |
YES
a10a10c
a10b30c
a22b30c
x37r70r |
3
a10b00c
a10b00c
c03y02x |
NO |
2
a??a99b
a??a99b |
YES
a11a99b
a22a99b |
| |
|
|
Тяжелая, вариант-2
Задачи на моделирование
Задача на реализацию
Мальчик Филя прочитал в одном научном журнале, что не так давно астрономы открыли новую планету, на которой как и на Земле существует жизнь. Ученые уже установили связь с ее жителями и успели выяснить, что эта планета обращается вокруг своей оси за другое время, поэтому сутки здесь длятся не 24 часа. На ней, так же как и на Земле, время измеряется часами, минутами и секундами. Но количество минут в часе, и секунд в минуте не совпадает с привычными земными.
А именно: в одном часе A минут, в одной минуте B секунд. Также, в одних сутках на этой планете X часов, Y минут Z секунд. То есть когда часы должны показать момент времени X:Y:Z, они показывают 0:0:0, и с этого момента начинается отсчет новых суток
Электронные часы здесь выглядят так же, как и на Земле: на них есть дисплеи для отображения часов, минут и секунд. Каждый из дисплеев содержит минимальное количество десятичных разрядов, которое требуется, чтобы отобразить любое количество часов, минут и секунд в течении суток, соответственно. Когда на дисплее показывается число с меньшим количеством разрядов, то оно дополняется ведущими нулями. В остальном часы на этой планете работают аналогично земным электронным часам.
Филя увлекается нумерологией, поэтому его интересует вопрос: сколько хороших моментов времени на часах этой планеты будет показано с момента времени H1:M1:S1 до момента времени H2:M2:S2 включительно. Филя называет момент времени хорошим, если в нем не содержится цифры c, то есть ни один из дисплеев не содержит (с учетом вышеописанных правил) цифру c.
Входные данные
В первой строке находятся два натуральных числа A, B (1 ≤ A, B ≤ 50) — количество минут в часе и секунд в минуте.
В следующей строке находятся три целых числа X, Y, Z (0 ≤ X ≤ 50, 0 ≤ Y < A, 0 ≤ Z < B) — количество часов, минут и секунд в сутках. Гарантируется, что X, Y, Z одновременно не равны нулю.
В следующей строке находятся три целых числа H1, M1, S1— стартовое время. Гарантируется, что это время, которое часы могут отобразить в течении суток.
В следующей строке находятся три целых числа H2, M2, S2— конечное время время. Гарантируется, что это время, которое часы могут отобразить в течении суток.
Обратите внимание, что моменты времени могут находиться в разных сутках. Также обратите внимание, что моменты времени могут совпадать. В этом случае в интервале находится единственный момент времени.
В следующей строке находится цифра c (0 ≤ c < 10).
Выходные данные
Требуется вывести одно число — количество хороших моментов времени с H1:M1:S1 до H2:M2:S2 включительно.
Пример входных и выходных данных
| Ввод |
Вывод |
3 2
5 0 0
0 0 0
1 0 0
3 |
7 |
4 2
3 1 1
1 0 0
0 0 0
0 |
6 |
50 50
24 0 0
3 0 0
18 15 0
7 |
26956 |
| |
|
|
Легкая, вариант-2
Задача на реализацию
Разбор случаев
Пете подарили n гирь и чашечные весы. Каждая гиря весит ai грамм. Первым делом он разложил гири на чаши. При этом одна из чаш может быть пустой. Теперь он хочет выяснить, какой наибольшей разницы весов на чашах можно достичь, не более чем за два перекладывания гирь.
Одно перекладывание происходит следующим образом: Петя выбирает некоторую гирю, лежащую на одной чаше весов и перекладывает ее на другую чашу весов. Обратите внимание, что Петя не обязан сделать ровно два перекладывания, он может сделать меньшее количество.
Входные данные
В первой строке находится одно натуральное число n (1 ≤ n ≤ 50) — количество гирек.
В каждой из следующих n строк находятся два натуральных числа ai, bi (1 ≤ ai ≤ 1000, 1 ≤ bi ≤ 2) — масса гири и номер чаши весов, на которой она находится.
Выходные данные
Требуется вывести одно число — наибольшую разницу весов, которую можно достичь, сделав не более двух перекладываний гирь.
Пример входных и выходных данных
| Ввод |
Вывод |
5
4 2
1 1
8 1
5 2
2 1 |
20 |
6
20 2
3 2
2 1
5 1
1 1
3 2 |
32 |
4
3 2
10 2
8 2
9 2 |
30 |
| |
|
|
Самая упоротая задача
Задача на реализацию
Задачи на моделирование
Сначала Антону Витальевичу показалось, что объявить приз на самую упоротую задачу – очень хорошая идея. Но когда его просто завалили этими задачами, он понял, что не успеет проверить их все к Новому Году. Поэтому он, пообещав хорошую оценку в журнал, дал Вам задание написать проверяющую эти задачи программу. (Ваш вопрос «А почему вы не можете сделать этого сами?» остался без ответа).
Задача – это набор текста, содержащего русские слова, заглавные латинские символы и числа, разделённые знаками препинания, специальными символами и пробелами. Упоротость задачи можно выразить целым неотрицательным числом, зависящим от многих факторов. Во-первых, чем длиннее задача, тем она упоротее, поэтому за каждое русское словоупоротость увеличивается на 1. Но если задача слишком длинная, то она из упоротой превращается в скучную. Поэтому, если количество слов превышает 50, то за каждое лишнее слово упоротость уменьшается на 2. Во-вторых, чем больше исходных данных, то есть латинских символов, тем задача упоротее, так что за каждый латинский символ упоротость умножается на 2. В-третьих, чем больше чисел нам дано сразу, тем задача скучнее, поэтому за каждое число упоротость делится на 10. Но если число отделено от латинского символа только пробелами, знаками препинания или специальными символами, то оно считается ограничением и вместо деления на 10 просто увеличивает упоротость на 30. В-четвёртых, знаки препинания – это всегда скучно, так что из-за них упоротость уменьшается на округлённый вверх двоичный логарифм их общего количества. Специальные символы и пробелы на упоротость никак не влияют. Если в результате получается нецелое число, оно округляется вниз.
Общая длина задачи не более 2*10^9 символов.
Русские слова - слова, состоящие из символов, не являющихся заглавными латинскими буквами, числами, знаками препинания и специальными символами.
Двоичным логарифмом нуля считать ноль.
К знакам препинания относятся , . ! ? ( ) :
К специальным символам относятся & * = + - / ><
Дана задача. Вам необходимо подсчитать её общую упоротость.
Формат ввода
Дан текст с единственным символом переноса в конце.
Формат вывода
Вывести единственное число – общую упоротость задачи.
Пример
Ввод:
2 N 2 N 2 N 2 N 2
Вывод:
2400
(с) Даниил Кирионенко, 9и
| |
|
|
Новогодние танцы
Задача на реализацию
Задачи на моделирование
Сегодня в Москве отмечается Новый год. Для танца составили схему, на которой показано кто и где находится. Есть несколько групп людей, одетых в разных персонажей.
Е-елка
О-охрана
1-зона 1
2-зона 2
3-зона 3
4-зона 4
Х-олени
К-зайцы
С-снеговики
М-медведи
Л-лисицы
В-волки
П-подарки
Д-деды Морозы.
Вот план для размеров поля 9 на 9. Размер поля всегда нечетный и больше 8.
О М М М 2 С С С О
Л О М М 2 С С О К
Л Л О М 2 С О К К
Л Л Л О О О К К К
3 3 3 О Е О 1 1 1
В В В О О О Х Х Х
В В О П 4 Д О Х Х
В О П П 4 Д Д О Х
О П П П 4 Д Д Д О
Человек, находящийся в зоне 1, одет в зайца, если стоимость его костюма кратна 3, в противном случае, он одет в оленя.
Человек, находящийся в зоне 2, одет в снеговика, если стоимость его костюма кратна 5, в противном случае, он одет в медведя.
Человек, находящийся в зоне 3, одет в лисицу, если стоимость его костюма кратна 5, в противном случае, он одет в волка.
Человек, находящийся в зоне 4, одет в подарок, если количество единиц его стоимости , записанной в двоичной системе счисления, больше количества нулей, в противном случае, он одет в Деда Мороза.
Про каждый костюм известно, за сколько его можно сшить.
Посчитайте и выведите стоимость костюма елки, затем охраны.
Затем надо вывести в порядке убывания стоимость и название костюма персонажа.
-
Входные данные:
Вводится n-размер квадратной матрицы, затем сама матрица.
-
Выходные данные:
Вывести сначала стоимость костюма елки, затем сумму всех костюмов охраны, затем в порядке убывания стоимость костюмов остальных персонажей и название костюма.
-
Входные данные:
9
0 1 1 0 2 5 5 4 1
2 3 2 4 5 6 1 2 0
1 2 3 4 2 3 1 2 3
1 2 2 4 3 5 7 1 2
0 2 3 1 2 3 4 5 6
0 1 2 3 5 3 3 4 5
5 6 2 7 4 2 2 4 2
8 4 3 4 3 1 3 4 5
6 7 8 2 5 2 1 3 3
-
2
58
39 podarok
32 olen
27 snegovik
27 volk
21 zayka
16 medved
16 ded moroz
10 lisiza
(с) Чуканова Юля, 10и
| |
|
|
Задача №1
Задача на реализацию
Нарисуйте из символов или напишите что-нибудь красивое и выведите это. Вы получите ОК, если проверяющая система согласится, что это красиво, и WA, если не согласится.
| |
|
|
Задача №4
Строки
Задача на реализацию
|
Входные данные |
Выходные данные |
|
What is your name? |
My name is Naruto Uzumaki! |
|
What is your name??? |
My name is Naruto Uzumaki!!! |
(с) Егор Курбатов, 10и
| |
|
|
Шифровка
Задача на реализацию
реализация
На контрольной по алгебре логики Филипп К. и Алла П. по ходу решения задачи хотят обмениваться наборами из 0 и 1, которые у них получаются. Но злобный учитель информатики очень строго следит за тем, чтобы в ходе контрольной ученики решали задачи самостоятельно. Правда, школьникам удалось воззвать к его человеческим чувствам, и он разрешил им обмениваться записками, содержание которых никак не связано с алгеброй логики.
К счастью, Филипп и Алла успели договориться, что они будут шифровать наборы из 0 и 1 предложениями русского языка. Слово четной длины будет обозначать 0, нечетной длины - 1, знаки препинания при расшифровке не учитываются.
Таким образом, расшифровать такую шифровку очень просто, а вот чтобы зашифровать какую-либо последовательность, требуется незаурядный литературный талант. Помогите им! Напишите программу, которая по введенной последовательности из 0 и 1, строит текст, соответствующий правилам русского языка, имеющий с точки зрения языка хоть какой-то (минимальный!) смысл, и который кодирует заданную последовательность.
Входные данные
В файле INPUT.TXT записано сначала число N (1<=N<=100) - длина последовательности, а затем последовательность из N чисел, каждое из которых является 0 или 1.
Выходные данные
В файл OUTPUT.TXT выведите текст на русском языке, который кодирует заданную последовательность. Обратите внимание! В тексте не должно быть одинаковых предложений (предложения считаются одинаковыми, если они совпадают с точностью до знаков препинания, если же они различаются хотя бы порядком следования слов, они уже считаются различными). А в одном предложении ни одно из слов не должно повторяться.
| |
|
|
Сжатие текста
Задача на реализацию
Разбор случаев
Архиватором называется программа, предназначенная для сжатия данных за счет удаления избыточной информации. В этой задаче вашей целью является разработка простейшего архиватора текстов на русском языке. В таких текстах многие знаки стандартной таблицы символов не встречаются, поэтому они могут быть использованы для замены часто повторяющихся последовательностей символов.
Заданы последовательности, которые могут быть заменены некоторыми символами английского алфавита, а также исходный текст, который следует сжать. Поскольку в исходном тексте эти последовательности могут накладываться друг на друга, результат сжатия существенно зависит от порядка замен. Ваша задача состоит в том, чтобы получить сжатый текст наименьшей длины.
Входные данные
В первой строке входного файла задано целое число R - количество заменяемых последовательностей и целое число N - количество строк в исходном тексте (1<=N<=1000). Далее следуют R пар строк, описывающих возможные замены. Первая строка каждой пары содержит заменяемую последовательность, а вторая - заменяющий символ, являющийся большой или маленькой английской буквой. Различным заменяемым последовательностям соответствуют разные английские буквы (большие и маленькие буквы различаются). В следующих N строках записан текст, подлежащий сжатию. В этом тексте, также как и в заменяемых последовательностях, отсутствуют буквы английского алфавита.
Выходные данные
В выходной файл вывести заархивированный текст.
Примечания
Символы перевода строки не заменяются (т.е. замены возможны только внутри строк). Длина каждой строки входного файла не превосходит 255 символов.
Пример входного файла
8 10
рхиватор
b
замен
D
ены
F
зам
G
быт
h
про
d
сжат
f
ом называется
g
Архиватором называется программа, предназначенная для сжатия данных за счет удаления
избыточной информации. В этой задаче вашей целью является разработка простейшего
архиватора текстов на русском языке. В таких текстах многие знаки стандартной таблицы
символов не встречаются, поэтому они могут быть использованы для замены часто
повторяющихся последовательностей символов.
Заданы последовательности, которые могут быть заменены некоторыми символами английского
алфавита, а также исходный текст, который следует сжать. Поскольку в исходном тексте эти
последовательности могут накладываться друг на друга, результат сжатия существенно зависит
от порядка замен. Ваша задача состоит в том, чтобы получить сжатый текст наименьшей длины.
Пример выходного файла
Аbg dграмма, предназначенная для fия данных за счет удаления
изhочной информации. В этой задаче вашей целью является разработка dстейшего
аbа текстов на русском языке. В таких текстах многие знаки стандартной таблицы
символов не встречаются, поэтому они могут hь использованы для Dы часто
повторяющихся последовательностей символов.
Заданы последовательности, которые могут hь DF некоторыми символами английского
алфавита, а также исходный текст, который следует fь. Поскольку в исходном тексте эти
последовательности могут накладываться друг на друга, результат fия существенно зависит
от порядка D. Ваша задача состоит в том, чтобы получить fый текст наименьшей длины.
| |
|
|
Копирование текста
Задача на реализацию
Дан текст (при этом в нем могут быть
строки длиннее 255 символов, строк может быть много и т.д.).
В ответе надо вывести точно такой же текст.
| |
|
|
Мобильный интернет
Вычисление по заданной формуле
Задача на реализацию
Мобильный интернет прочно вошел в нашу жизнь. Операторы связи предлагают различные способы оплаты мобильного интернета и, зная свои потребности, можно выбрать наиболее дешевый
из подходящих тарифов.
Рассмотрим следующие тарифные планы:
1. Единовременно каждый месяц платится 350Р за 3000 мегабайт. Также можно докупать дополнительные пакеты по 300 мегабайт за 30Р каждый, которые действуют до конца месяца.
2. 500 мегабайт в день за 29Р в сутки. За дни, в которые интернет не используется (скачано 0 мегабайт), плата не взимается.
3. Оплата за использованный трафик 1, 2Р за 1 мегабайт.
4. Безлимитный интернет на месяц за 790Р.
5. Лимитированный тариф 16000 мегабайт на месяц за 590Р.
По известному количеству трафика в каждый из 31 дней одного месяца определите, сколько денег уйдет на оплату интернета при использовании каждого из тарифных планов или сообщите, что использование тарифа невозможно (недостаточно трафика).
Входные данные
В единственной строке входных данных содержится тридцать одно целое неотрицательное чис-
ло планируемый трафик по дням следующего месяца в мегабайтах.
Выходные данные
Выведите пять чисел в отдельных строках стоимость трафика за месяц при использовании
соответствующего тарифа или −1, если требуемое использование интернета недопустимо в рамках
соответствующего тарифа (например, суммарный или суточный трафик превосходит ограничение
тарифа).
Стоимость требуется вывести в формате <рубли> <копейки>.
|
Ввод |
Вывод |
|
3001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
380 0
-1
3601 20
790 0
590 0 |
| |
|
|
Интернет-магазин
Пересечение множеств
Задачи на моделирование
Задача на реализацию
При покупке товаров в интернет-магазинах все выбранные товары складываются в корзину. При этом покупатели могут забыть добавить какой-нибудь из нужных им товаров.
Для того, чтобы покупатели остались довольны покупкой, а магазин получил больше прибыли существует механизм рекомендаций, который определяет, какие товары обычно покупают вместе с набором уже выбранных. Например, если покупатель положил в корзину ластик, то, наверняка, ему также понадобится карандаш.
Вам необходимо разработать сервис рекомендаций, который по истории предыдущих заказов разработает для покупателя рекомендации, основанные на текущем состоянии его заказа.
Рекомендации должны быть двух типов: "с этим товаром всегда берут следующие товары" и "с этим товаром часто берут следующие товары". При этом "часто" понимается как 50% и более.
Например, если покупатель хочет купить два товара A и B, а предыдущие заказы были вида (A,
D), (B, C, E), (C, F), (C, E, F, G) и (A, B, C, E), то товары C и E надо рекомендовать как те, что
покупается всегда (вместе с товаром B), а D как тот, что покупается часто (50% случаев заказов
с товаром A).
Если товар всегда покупался с одним из заказанных, то необходимо включить в число часто покупаемых и те, которые часто встречаются с этим товаром (не менее чем в 50% случаев) в ранее сделанных заказах. Таким образом, дополнительно к товарам покупаемым часто, добавится товар F, который часто покупается с товаром C. Товар G рекомендовать не нужно, т.к. он встречается меньше, чем в 50% заказов вместе с товаром C.
Не нужно рекомендовать товары, которые уже выбрал покупатель. Если товар можно рекомендовать как "часто" и "всегда", то следует рекомендовать его только как "всегда".
Входные данные
В первой строке входного файла записывается количество старых заказов N. Следующие N строк содержат названия товаров, сделанных в этом заказе. Каждое название состоит из одного слова, слова разделены пробелами. В следующей строке содержится описание текущего заказа: набор названий товаров, разделенных пробелами.
Выходные данные
Для текущего заказа выведите две строки. Первая строка должна содержать названия товаров, которые всегда покупаются вместе с товарами из текущего заказа, вторая с названиями часто покупаемых товаров (соответственно определению часто покупаемых товаров из условия задачи).
Слова следует разделять пробелами. Порядок вывода не важен.
|
Ввод |
Вывод |
5
A D
B C E
C F
C E F G
A B C E
A B |
C E
D F |
| |
|
|
Поедание плоского сыра
Задача на реализацию
Есть кусок сыра в виде прямоугольника размера NxM.
Маленький мышонок хочет съесть весь кусок сыра. Начав в произвольной клетке, он, поедая очередной кусочек (1х1), переходит в соседний (только если он его еще не съел). Помогите маленькому мышонку составить маршрут по прямоугольнику, чтобы он съел весь сыр.
Входные данные
В строке записаны числа N, M. (1<=N,M<=30)
Выходные данные.
Вывести маршрут мышонка в виде последовательности координат кусочков, которые он съедает.
Кусочки сыра имеют координаты от 1 до N по оси X, от 1 до M по оси Y.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
2 2 |
1 1
2 1
2 2
1 2
|
| |
|
|
Трехзначные числа с различными цифрами
Задача на реализацию
Цикл for
Напечатайте столбиком в возрастающем порядке все 3-х значные числа, у которых все цифры различны.
| |
|
|
Арифметическое выражение-2
Разбор выражений
Задача на реализацию
Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки «+», «–», «*» и «/»). На вход подается символьная строка, представляющая собой арифметическое выражение. Все числа целые. Операция «/» выполняется как целочисленное деление
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
12*3+45 |
81 |
| 2 |
12-45/3 |
-3 |
| |
|
|
Скобки
Стек
Задача на реализацию
Напишите программу, которая проверяет правильность расстановки скобок в арифметическом выражении. Используются скобки трёх типов: ( ), [ ] и { }.
Входные данные
На вход подается строка.
Выходные данные
Выведите на экран Yes, если в строке правильного расставлены скобки. В противном случае, выведите No.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
(5+7)*[5+{(4+3)*[9-6]+7}-8] |
Yes |
| 2 |
[(2+3) |
No |
| |
|
|
Жизнь
Задача на реализацию
Алгоритмы обработки
Дмитрий работает биологом и недавно открыл новый вид бактерий, которые живут в необычных условиях — в таблицах размером 10 на 10 ячеек. Табличные бактерии состоят из нескольких живых клеток. Дмитрий вычислил, что бактерия существует по следующим правилам:
- Если какая-то клетка бактерии имеет двух или трёх живых соседей, то в следующий момент времени она остаётся жить.
- Если какая-то клетка бактерии имеет менее двух живых соседей, то в следующий момент времени она умирает от одиночества и становится пустой ячейкой.
- Если какая-то клетка бактерии имеет более трёх живых соседей, то в следующий момент времени она умирает от перенаселения и становится пустой ячейкой.
- Если у пустой ячейки таблицы имеется ровно три живых клетки-соседа, то в следующий момент времени в ней зарождается живая клетка.
Соседями ячейки являются ближайшие ячейки по горизонтали (справа и слева), по вертикали (снизу и сверху), а также по четырём диагоналям. Таким образом, у ячейки может быть максимум 8 соседей.
Дмитрию нужна программа, которая по текущей форме бактерии прогнозирует, как она будет выглядеть в следующий момент времени. Помогите ему в этом.
Формат входных данных
Ввод состоит из 10-ти строк. Каждая строка содержит в себе 10 символов. Символ '#' означает, что в соответствующей ячейки находится живая клетка бактерии, а символ '.' означает, что ячейка пуста.
Формат выходных данных
Необходимо вывести таблицу 10 на 10 — изображение бактерии в следующий момент времени.
| |
|
|
Твоя игра
Задача на реализацию
Задачи на моделирование
В интеллектуальном шоу «Твоя игра» принимают участие 3 человека. Им даются 5 тем, каждая из которых содержит по 5 вопросов стоимостью 100, 200, 300, 400 и 500 баллов. Если игрок правильно отвечает на вопрос, то к его текущей сумме прибавляется стоимость вопроса, если же он допускает ошибку, то от его суммы стоимость вопроса отнимается. При этом у игрока может оказаться отрицательная сумма баллов.
К сожалению, программа, подсчитывающая количество баллов, случайно самоуничтожилась. Вам необходимо написать свою программу, иначе суперфинал не состоится.
Формат входных данных
В первой строке находится три последовательности символов, разделённые пробелом — имена участников. Имя начинается с заглавной буквы, остальные буквы являются строчными. Имя участника содержит не более 10 и не менее 2 букв, все буквы латинские.
В следующих строках содержится информация о сыгранном вопросе. Сперва идёт имя участника, отвечавшего на вопрос, а через пробел — полученная им сумма баллов. Если количество баллов положительно, то ответ оказался правильным, если же отрицательно, то игрок ошибся. Гарантируется, что разыгранное количество вопросов каждой стоимости (100, 200, 300, 400 и 500) не превосходит 5. Также гарантируется, что во время игры будет разыгран хотя бы один вопрос.
В последней строке находится надпись «GAME OVER», означающая, что игра окончена и больше вопросов не будет.
Формат выходных данных
Для каждой строки ввода, описывающей разыгранный вопрос, нужно вывести 3 числа: баллы игроков после розыгрыша вопроса. Баллы должны соответствовать игрокам в порядке следования их имён в первой строке входных данных.
Ввод:
Artur Dmitry Fedor
Artur -500
Dmitry 400
Fedor 100
Artur 400
Fedor 200
Fedor 100
Artur 500
GAME OVER
Вывод:
-500 0 0
-500 400 0
-500 400 100
-100 400 100
-100 400 300
-100 400 400
400 400 400
| |
|
|
Числа без цифры 8
Строки
Задача на реализацию
Напишите функцию, определяющую есть ли в записи числа цифры 8.
Используя данную функцию, напишите программу, которая среди n натуральных чисел, вводимых с клавиатуры, подсчитывает количество чисел, в записи которых нет цифры 8
Входные данные:
в первой строке вводится число n - количестве чисел (n<=100),
далее идут n строк по одному натуральному числу в строке
Выходные данные:
программа должна вывести одно число, количество чисел, в записи которых нет цифра 8
Количество баллов за задачу уточняется после ручной проверки (и будет снижено, в случае если вы не используете функцию!).
Пример
|
Ввод
|
Вывод
|
|
5
22
94
66
18
18
|
3 |
|
2
21
46
|
2
|
| |
|
|
Кратность 11
Задачи на процедуры и функции
Задача на реализацию
Для делимости числа на 11, необходимо, чтобы разность между суммой цифр, стоящих на четных местах, и суммой цифр, стоящих на нечетных местах, делилась на 11.
Напишите функцию, работающую по данному алгоритму, для проверки делимости числа n, вводимого с клавиатуры, на 11.
Используя данную функцию, напишите программу, которая запрашивает у пользователя число n (0<=n<=100000) и выводит на экран фразу multiple of 11, если число кратно 11 и фразу not multiple of 11, если число не кратно 11
Количество баллов за задачу уточняется после ручной проверки (и будет снижено, в случае если вы не используете функцию или функция вычисляет кратность не по приведенному алгоритму!).
Пример
|
Ввод
|
Вывод
|
|
1 |
not multiple of 11 |
|
11 |
multiple of 11 |
| |
|
|
Преобразование последовательности
Задача на реализацию
Задачи на моделирование
Учительница математики очень не любит Колю и всегда заставляет его отвечать у доски самые
сложные задачи.
Вот и сегодня она написала на доске последовательность из n целых неотрицательных чисел
чисел a1, a2, . . . , an и вызвала Колю к доске. За одно действие учительница разрешает Коле
стереть любое число и на его место записать число на единицу больше. Учительница требует от
Коли за минимальное число действий добиться того, чтобы где-нибудь в этой последовательности
встречались подряд в возрастающем порядке числа от 1 до h.
Помогите Коле понять, за какое минимальное число действий ему удастся добиться того, что для
некоторого i будет выполнено ai = 1, ai+1 = 2, . . . , ai+h−1 = h, или выясните, что это невозможно и
учительница опять безнаказанно издевается над бедным Колей.
Формат входных данных
Первая строка входного файла содержит два натуральных числа: n и h (1 ≤ h ≤ n ≤ 200 000).
Вторая строка содержит n чисел ai — исходные значения элементов выписанной последовательности
(0 ≤ ai ≤ n).
Формат выходных данных
В единственной строке выходного файла выведите минимальное количество действий, за которое
Коля сможет выполнить задание, или −1 в случае, если выполнить его невозможно.
Примеры
Ввод
4 3
1 1 0 2
Вывод
3
Ввод
3 2
1 3 2
Вывод
-1
В первом примере Коле надо дважды увеличить на 1 третье число и один раз — четвертое. Тогда
последовательность примет вид 1, 1, 2, 3, для i = 2 выполнено искомое условие.
Во втором примере получить в последовательности подряд 1 и 2 невозможно.
| |
|
|
Саруман
Хеш
Задача на реализацию
Как известно, Саруман Белый - маг очень занятой и каждый день ему приходится работать с огромным количеством древних свитков. Чтобы не запутаться, он дал каждому свитку номер и положил их все на длинную полку. Но последнее время к нему постоянно наведывался Гендальф, чтобы узнать что-нибудь из свитков, что доставляет удовольствие Гендальфу и очень бесит Сарумана. И чтобы не отвечать на огромное количество вопросов Гендальфа где что лежит, он пообещал подарить свой посох тому, кто напишет программу отвечающую на вопросы Гендальфа.
Входные данные:
В первой строке задаётся число N(0<=N<=105). На следующих N строках идет описание типа свитка и его номер L (-109<=L<=109). Потом вводится число Q(0<=N<=105) – количество запросов. А затем на еще Q строках вводится тип свитка и его номер (-105<=L<=105).
Типы свитков:
LEG - легендарные
FEW - редкие
STAND – обычные
Выходные данные:
На каждый запрос вывести позицию свитка если он есть (Нумерация с 1) и “Fatality error” если такого не имеется. Каждый ответ на новой строке. Так же Гендальфу интересен номер самого большого свитка и самого маленького (Тип свитка на это не влияет). Это необходимо вывести после основных запросов на новой строке по образцу в примере.
Пример:
Входные данные:
5
LEG -345
LEG 1
FEW 2452
STAND 4
FEW 334
3
LEG -353
LEG -345
STAND 4
Выходные данные:
Fatality error
1
4
Max 2452 Min -345
Автор: Аксенов Владимир
| |
|
|
Дюна
Задача на реализацию
Задачи на моделирование
Географ Григорий Георгиевич исследует образование песчаных дюн. Он выбрал очень длинную дюну и разбил его на огромное число участков, которые пронумеровал от 1 до 109.
Теория Григория Георгиевича гласит, что изначально высота песка относительно некоторой условной отметки на всех участках была равна нулю. После этого произошло n сильных порывов ветра, которые могли изменить ландшафт.
Порыв ветра номер i имел силу xi и действовал на участки с li-го по ri-й. В результате этого порыва высота участка номер li увеличилась на xi, высота участка номер li + 1 уменьшилась на xi, следующего — снова увеличилась на xi, и так далее до участка номер ri, включительно.
Зная всю информацию о всех n порывах ветра, Григорий Георгиевич хочет узнать установившуюся в итоге высоту некоторых интересующих его m участков. Помогите ему.
Формат входных данных
В первой строке входного файла содержатся два натуральных числа n и m (1 ≤ n,m ≤ 1000) — количество порывов ветра и количество участков, итоговая высота которых интересует Григория Георгиевича.
В каждой из следующих n строк содержится описание очередного порыва ветра — три целых числа li, ri, xi (1 ≤ li ≤ ri ≤ 109; 1 ≤ xi ≤ 1000).
В каждой из следующих m строк содержится целое число qi (1 ≤ qi ≤ 109) — номер участка, для которого требуется узнать его итоговую высоту. Номера участков приведены в возрастающем
порядке.
Формат выходных данных
Для каждого из m запросов выведите одно целое число — высоту соответствующего участка.
Пример
Ввод:
2 6
1 6 7
3 7 2
1
2
3
6
7
| |
|
|
Тренировка: тетушка Сова
Ввод, вывод данных
Задача на реализацию
Напишите программу, которая рисует тетушку Сову в виде картинки 5 на 11 символов:
:)\_____/(:
{(@)v(@)}
{|~- -~|}
{/^'^'^\}
===m-m===
| |
|
|
Bit++
Задача на реализацию
Классический язык программирования в Битландии — Bit++. Этот язык очень необычный и сложный!
Особенность языка Bit++ состоит в том, что в нем ровно одна переменная, которая называется x. Также в этом языке есть две операции:
Операция ++ увеличивает значение, хранящееся в переменной x на 1.
Операция -- уменьшает значение, хранящееся в переменной x на 1.
Предложение в языке Bit++ — это последовательность, состоящая из ровно одной операции и ровно одной переменной x. Предложение записывается без пробелов, то есть может содержать только символы: «+», «-», «X». Выполнить предложение, значит выполнить операцию, которая содержится в предложении.
Программа на языке Bit++ — это последовательность предложений, каждое из которых требуется выполнить. Выполнить программу, значит выполнить все ее предложения.
Вам задана программа на языке Bit++. Перед выполнением программы в переменной x хранится значение 0. Выполните программу и выведите значение, которое будет храниться в переменной x после выполнения программы.
Входные данные
В первой строке записано единственное целое число n (1 ≤ n ≤ 150) — количество предложений в программе. В каждой из следующих n строк записано по предложению. Каждое предложение состоит из ровно одной операции (++ или --) и ровно одной переменной x (обозначается буквой «X»). Таким образом, не бывает пустых предложений. Операция и переменная могут быть записаны в любом порядке.
Выходные данные
Выведите единственное целое число — значение, которое будет храниться в переменной x после выполнения программы.
| |
|
|
Белковая последовательность - 2
Строки
Задача на реализацию
Напишите программу, которая преобразовывает РНК не кратную трем в белковую последовательность, подсчитывает длину и количество определённых аминокислот (L).
Формат входных данных
Единсвенная строка содержит последовательность РНК.
Формат выходных данных
Запишите три строки, являющиеся ответами на задания задачи соответственно:
1) Белковая последовательность.
2) Длина цепи.
3) Колличество аминокислот L.
| |
|