2016 Технокубок: Финал
Statement is not available in English language
A. Программист 80-го уровня
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Василий мечтает стать программистом k-го уровня. У него есть n дней чтобы осуществить задуманное — повысить свой уровень с 1-го до k-го. Для перехода с уровня x на уровень x + 1 необходимо с момента получения уровня x решить x задач.

В i-й день на одном известном сайте публикуются ai задач, при этом все они доступны для решения только в день публикации. Каждый день Василий решает задачи последовательно, одну за одной, при этом в i-й день он может решить не больше чем ai задач. Как только суммарное количество задач, решённых Василием с момента получения последнего уровня x, становится равно x, он останавливается и в этот день больше задач не решает. В этом случае в конце дня он совершает переход на следующий уровень x + 1. При этом задачи, которые Василий в этот день решить не успел, он не решит уже никогда.

Решённые задачи не накапливаются при переходе на следующий уровень, то есть для каждого x для перехода на уровень x + 1 Василию надо решить x задач, именно будучи программистом уровня x.

Василий может приступить к занятиям в любой день от 1 до n, при этом он хочет минимизировать разницу между номером дня, когда он станет программистом k-го уровня, и днём, когда он начнёт заниматься.

Входные данные

В первой строке входных данных записаны два целых числа n и k (1 ≤ n ≤ 500, 2 ≤ k ≤ n + 1) — общее количество дней и уровень, которого Василий хочет достичь, соответственно.

Во второй строке находятся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 500), где ai равно количеству доступных для решения задач в i-й день.

Выходные данные

Выведите единственное целое число — минимальное количество дней, в течение которых Василий сможет достичь k-го уровня программирования.

Если достичь желаемого Василию не удастся, выведите -1.

Примеры
Входные данные
6 4
2 2 2 1 3 3
Выходные данные
3
Входные данные
12 5
1 1 1 1 1 1 1 1 1 1 1 1
Выходные данные
10
Входные данные
10 5
10 10 10 10 10 10 10 10 10 10
Выходные данные
4
Примечание

В первом примере Василий может приступить к занятиям в 4-й день:

  • в 4-й день решить одну задачу и в конце дня перейти на уровень 2;
  • в 5-й день решить две задачи из трёх и в конце дня перейти на уровень 3;
  • в 6-й день решить все три задачи и в конце дня перейти на уровень 4.

Во втором примере Василию для перехода на 5-й уровень надо решить 1 + 2 + 3 + 4 = 10 задач. Так как каждый день он может решать не более одной задачи, ему понадобится 10 дней.

В третьем примере Василий может повышать уровень каждый день. Следовательно, ему достаточно 4-х дней.

Statement is not available in English language
B. Замена букв
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

У Ивана очень много свободного времени, да и читает он очень быстро, а вот газет, которые ему интересны, за день выходит не так много. Поэтому в последнее время после прочтения очередной газеты Иван стал считать количество вхождений своей любимой строки s в текст t, написанный в газете, в качестве подстроки. Подстрокой строки x называется последовательность подряд идущих символов строки x.

Но вскоре и с подсчётом вхождений Иван стал справляться очень быстро, и он решил после прочтения очередной газеты заменить в своей любимой строке не более k символов таким образом, чтобы максимизировать количество вхождений изменённой строки s в текст газеты t.

Перед вами стоит задача помочь Ивану и посчитать максимальное количество вхождений его любимой строки s после замены в ней не более k символов в текст газеты t. Ивану не обязательно заменять ровно k букв, и, возможно, ему даже не придётся заменять ни одной буквы. Заменять букву из строки s можно на любую другую.

Входные данные

В первой строке входных данных записаны три целых числа n, m и k (1 ≤ n ≤ m ≤ 250, 0 ≤ k ≤ n) — длина строки s, длина строки t и количество символов, которые может заменить Иван в своей любимой строке, соответственно.

Во второй строке входных данных следует непустая строка s, состоящая из n строчных букв английского алфавита, — любимая строка Ивана.

В третьей строке входных данных следует непустая строка t, состоящая из m строчных букв английского алфавита, — текст, написанный в газете. Гарантируется, что длина строки s не превышает длины строки t.

Выходные данные

Выведите единственное целое число — максимальное количество вхождений любимой строки Ивана s после замены в ней не более k символов в текст газеты t.

Примеры
Входные данные
2 4 1
zz
azaz
Выходные данные
2
Входные данные
3 10 2
aca
accaccacca
Выходные данные
3

Statement is not available in English language
C. Призовой фонд
ограничение по времени на тест
3 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Компания ХакерКук провела свой грандиозный чемпионат по спортивному программированию с большим призовым фондом, однако распределение призовых денег до сих пор не объявлено. Единственное, что известно об итоговом распределении, это что участник с более высоким местом получит не меньше призовых денег, чем участник с более низким местом.

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

Входные данные

В первой строке входных данных заданы два целых числа n и k (1 ≤ k ≤ n ≤ 1 000 000) — общее количество участников и количество друзей работника ХакерКук.

Во второй строке задано k различных целых чисел ai (1 ≤ ai ≤ n) в возрастающем порядке — места, которые заняли друзья хитрого разработчика.

Выходные данные

Выведите n целых неотрицательных чисел b1, b2, ..., bn (), которые означают, что участник, занявший i-е место, должен получить часть призового фонда.

Если возможных ответов несколько, разрешается вывести любой.

Гарантируется, что существует оптимальный ответ, удовлетворяющий условию, описанному в формате вывода.

Примеры
Входные данные
5 2
1 2
Выходные данные
2 1 0 0 0
Входные данные
2 1
2
Выходные данные
1 1 
Входные данные
3 2
1 3
Выходные данные
1 0 0 
Примечание

В первом примере весь призовой фонд достанется друзьям хитрого разработчика ХакерКук.

Во втором примере нельзя получить больше, чем половину призового фонда, так как первое место получает приз не меньший, чем второе.

Statement is not available in English language
D. Цветы
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Вася хочет подарить Маше букет на 8 марта. Он знает одну тайную тропинку в лесу за городом, вдоль которой растут красивые, а главное, бесплатные цветы. Тропинка может быть представлена как прямая, причём можно считать, что Вася изначально появляется на ней в точке 0 и двигается со скоростью 1, не затрачивая времени на то, чтобы срывать цветы.

Цветок номер i растёт в точке тропинки с координатой xi, а после того, как Вася его сорвёт, цветок остается живым еще ti единиц времени. Естественно, Вася должен набрать в букет нечётное число цветов, и все они должны быть живыми в момент, когда он принесёт их в точку 0 на встречу с Машей (если i-й цветок принести ровно через ti единиц времени после его срывания, то он уже не считается живым).

Вася — человек прямой, и даже ради Маши он не готов поворачивать (то есть менять направление своего движения вдоль тропинки) более 2 раз. Помогите ему собрать самый большой букет нечётного размера.

Входные данные

В первой строке входных данных вводится единственное целое число n (1 ≤ n ≤ 200 000) — количество цветов, растущих вдоль тропинки.

Каждая из следующих n строк содержит два целых числа xi и ti ( - 109 ≤ xi ≤ 109, 0 ≤ ti ≤ 109) — координату i-го цветка и время, которое он будет живым, после того как его сорвут, соответственно. В одной точке может расти больше одного цветка.

Выходные данные

Выведите единственное число — максимально возможное количество цветов в букете. Если нельзя собрать букет даже из одного цветка, выведите 0.

Примеры
Входные данные
3
2 5
-1 2
3 4
Выходные данные
1
Входные данные
1
1 1
Выходные данные
0
Примечание

В первом примере можно сорвать два цветка, а именно пройти до точки 2 и взять цветок, который там растет, а затем пройти в точку  - 1 и сорвать цветок ещё и там. Но букеты из чётного количества цветков нам не подходят, поэтому ответ равен 1.

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

Statement is not available in English language
E. Берляндская хоккейная лига
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В чемпионате Берляндской хоккейной лиги участвуют n команд. Турнир проходит по круговой системе: каждая команда играет с каждой ровно один матч, при этом ничьих в турнире не бывает. В отличие от традиционных турниров, распределение призов в Берляндской хоккейной лиге зависит не от итогового места команды, а от количества побед. А именно: призы получают все команды, выигравшие как минимум w игр. Хоккейный эксперт Дон Берри интересуется, могут ли по итогам этого турнира получить призы ровно k команд. Если такой турнир существует, вам нужно вывести победителя для каждого матча.

Входные данные

В единственной строке входных данных записаны три числа n, w и k (2 ≤ n ≤ 1000, 0 ≤ w ≤ n, 0 ≤ k ≤ n) — количество участвующих команд, минимальное число побед для получения приза и количество победителей турнира, предсказанное экспертом.

Выходные данные

Если турнира с такими свойствами не существует, выведите «NO» (без кавычек) в единственной строке выходных данных.

В противном случае в первой строке выведите «YES» (без кавычек). Затем выведите n строк длины n, j-й символ i-й из них должен соответствовать матчу между командами i и j. Если i = j, то соответствующий символ должен быть равен 0. Если команда i победила команду j, то этот символ равен 1, иначе 0. Для всех i ≠ j ровно один из двух символов, соответствующих встрече этих команд, должен быть равен 1.

Примеры
Входные данные
2 1 1
Выходные данные
YES
01
00
Входные данные
3 1 2
Выходные данные
YES
011
001
000
Входные данные
4 2 1
Выходные данные
YES
0111
0010
0001
0100
Входные данные
3 1 1
Выходные данные
NO
Примечание

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

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

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

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

Statement is not available in English language
F. Карлсон
ограничение по времени на тест
3 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Прошло 20 лет. Карлсон располнел и больше не летает. Малыш устроился на работу, стал топ-менеджером и теперь живёт в огромном доме на n-м этаже.

Карлсон решил пойти в гости к Малышу. Разумеется, пешком подниматься он не собирается, поэтому на первом этаже Карлсон заходит в лифт.

Кнопки в лифте расположены снизу вверх таким образом, что человек с ростом h может достать до любой кнопки, соответствующей этажу от 1 до h включительно. При этом на i-м этаже у Карлсона есть друг с ростом hi, и его можно попросить нажать на любую кнопку, до которой он может дотянуться. Разумеется, чтобы попросить друга с i-го этажа нажать на кнопку, сначала нужно оказаться на этаже i. Карслон хочет добраться до Малыша, обратившись за помощью к минимально возможному количеству друзей.

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

Входные данные

В первой строке входных данных содержатся два целых числа n и h (2 ≤ n ≤ 106, 1 ≤ h ≤ 109) — номер этажа, на котором живёт Малыш, и рост Карлсона соответственно. В следующей строке записаны целые числа h1, h2, ..., hn - 1 (1 ≤ hi ≤ 109), i-е из которых соответствует росту друга Карлсона, проживающему на i-м этаже.

Выходные данные

Выведите n - 1 число ans1, ans2, ..., ansn - 1, где ansi равно минимальному количеству друзей, которых придётся попросить помочь, если Карлсон поссорится с другом, проживающим на i-м этаже. Если, поссорившись с i-м другом, Карлсон не сможет добраться до Малыша, то выведите -1 вместо соответствующего значения ansi.

Примеры
Входные данные
2 2
2
Выходные данные
0 
Входные данные
2 2
2
Выходные данные
0 
Входные данные
3 2
2 3
Выходные данные
1 -1 
Входные данные
8 5
5 8 6 6 7 12 14
Выходные данные
1 2 1 1 1 1 1 
Входные данные
3 1
1 2
Выходные данные
-1 -1 

Statement is not available in English language
G. Камень-ножницы-бумага
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Петя и Вася играют в известную игру «Камень-ножницы-бумага». Игра проходит в n раундов. В каждом раунде Петя и Вася выбирают одну из трёх фигур: камень, ножницы или бумагу. Если фигуры игроков не совпали, победитель определяется стандартным способом (камень побеждает ножницы, ножницы побеждают бумагу, бумага побеждает камень), иначе объявляется ничья. За победу присуждается w очков, за ничью — d очков, за поражение — 0 очков. Итоговый счёт каждого игрока — это сумма очков по всем раундам.

Петя заранее определил, какую фигуру он будет выбирать в каждом раунде, и записал это в виде строки длины n из букв «r», «s» и «p». Здесь буква «r» на i-й позиции в строке означает, что в i-м раунде Петя выберет камень, «s» — ножницы, а «p» — бумагу.

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

Входные данные

Первая строка входных данных содержит три целых числа n, w и d (1 ≤ n ≤ 100 000, 0 ≤ d ≤ w ≤ 109) — количество раундов, количество очков за победу и количество очков за ничью соответственно.

Вторая строка содержит строку длины n, состоящую из символов «r», «s», «p», — циклический сдвиг записанной Петей строки.

Выходные данные

Выведите одно число — максимальный счёт, который может гарантировать себе Вася.

Примеры
Входные данные
3 3 1
rsp
Выходные данные
6
Входные данные
5 1 0
sssss
Выходные данные
5
Входные данные
3 5 2
psp
Выходные данные
12
Примечание

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

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

В третьем примере, выбирая постоянно ножницы, Вася выиграет два раунда, а в оставшемся раунде будет объявлена ничья. Таким образом, Вася может гарантировать себе 2·5 + 1·2 = 12 очков.