Формат входного файла - KPI-Open

advertisement
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
Задача A. Интересное число
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти
стандартный ввод
стандартный вывод
2 секунды
256 мегабайт
Для заданного числа N найдите наименьшее положительное целое число с
суммой цифр N, которое делится на N.
Формат входного файла
В первой строчке находится число N (1 ≤ N ≤ 1000).
Формат выходного файла
В единственной строчке выведите найденное число.
Пример
стандартный ввод
1
10
стандартный вывод
1
190
Страница 1 из 12
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
Задача B. Количество путей
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти
стандартный ввод
стандартный вывод
1 секунда
64 мегабайт
Есть полоска длины N, одна из клеток которой является особенной. Мы можем
сделать шаги двух видов – на следующую клетку, или через одну клетку. Необходимо
найти общее количество путей, которые:
1) обязательно проходят через особенную клетку;
2) обязательно не проходят через особенную клетку.
Например: N = 4, и особенная клетка номер три.
Значит у нас есть два пути, которые обязательно проходят через особенную
клетку 3 (1 – 2 – 3 – 4, 1 – 3 – 4) и один путь, который не проходит через особенную
клетку 3 (1 – 2 – 4).
Формат входного файла
Единственная строчка входного файла содержит два числа N и M (3 ≤ N ≤ 50,
1 < M < N) – количество клеток и номер особой клетки.
Формат выходного файла
Единственная строчка выходного файла должна содержать одно число –
количество найденных путей.
Пример
стандартный ввод
4 3
стандартный вывод
3
Страница 2 из 12
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
Задача C. Забор
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти
стандартный ввод
стандартный вывод
4 секунды
128 мегабайт
Васе поручили покрасить забор. Каждое утро Вася брал банку с краской и шел
красить. Всего в заборе было N дощечек. За один день он красил забор непрерывно от
одной дощечки до другой. Васю не интересовал результат, ему нравился сам процесс,
поэтому, каждый день цвет краски он выбирал наугад и интервал покраски тоже.
Периодически к Васе приезжало руководство и спрашивало, сколько дощечек
покрашено в определенный цвет на заданном интервале. Вася возненавидел эти дни,
так как в этих случаях ему приходилось выходить на улицу, идти вдоль забора, и
считать дощечки с этим цветом. Ваша задача состоит в том, чтобы помочь Васе
отвечать на эти вопросы.
Формат входного файла
В первой строке входного файла задано N и K (1 ≤ N ≤ 105, 0 ≤ K ≤ 105) –
количество дощечек в заборе и количество запросов. В следующих K строках заданы
запросы – четверки чисел Ti, Li, Ri, Ci (Ti = {0, 1}, 1 ≤ Li ≤ Ri ≤ N, 1 ≤ Ci ≤ 105).
Формат выходного файла
Для каждого запроса Ti = 0, необходимо покрасить забор в цвет Сi от Li-й до Riй дощечки включительно. Для каждого запроса Ti = 1, необходимо вывести в
отдельной строке число – сколько дощечек от Li-й до Ri-й включительно покрашено
в цвет Ci.
Пример
стандартный ввод
5
0
0
1
5
0
1
0
0
3
1
2
1
5
2
1
1
4
стандартный вывод
1
3 1
4 2
4 1
4
5
5
5
3
3
1
2
3
2
Страница 3 из 12
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
стандартный ввод
стандартный вывод
1 2 4 1
Страница 4 из 12
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
Задача D. F*cebook
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти
стандартный ввод
стандартный вывод
1 секунда
64 мегабайт
Социальную сеть f*cebook атаковал вирус. Действие вируса заключается в том,
что он разрывает дружественную связь между двумя людьми, иными словами два
человека перестают быть друзьями в этой социальной сети. Вирус быстро
распространяется, и его нужно как можно быстрее ликвидировать.
Вам предстоит задача - посчитать степень поражения сети вирусом. Будем
считать, что друзья моих друзей являются мне друзьями тоже, хоть и между нами не
установлена явная связь. Тогда вся сеть распадается на отдельные компоненты, в
каждой компоненте человек является другому человеку непосредственным другом
либо другом через некоторую цепочку людей. Назовем дружественностью всей сети
число, которое является суммой квадратов количества людей в каждой компоненте.
Формат входного файла
В первой строке через пробел заданы числа N и M - количество людей и
непосредственных связей о дружбе (2 ≤ N ≤ 100000; 1 ≤ M ≤ 100000). В каждой из
следующих M строк через пробел заданы два различных числа — номера людей,
которые непосредственно дружат, связи не повторяются. Люди пронумерованы
числами от 1 до N, связи пронумерованы числами от 1 до M в том порядке, в котором
они перечислены. Далее записано число Q - количество поражений вирусом, (1 ≤ Q ≤
M). В последней строке заданы номера связей, которые разорвал вирус - различные
числа, отделяемые друг от друга пробелом.
Формат выходного файла
Выведите в единственной строке через пробел Q чисел - дружественность сети
после каждого поражения.
Пример
стандартный ввод
4
1
2
1
3
4
2
3
3
4
стандартный вывод
16 10 6
Страница 5 из 12
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
стандартный ввод
3
2 4 3
3 1
1 2
1
1
стандартный вывод
3
Страница 6 из 12
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
Задача E. Интересный ромб
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти
стандартный ввод
стандартный вывод
12 секунд
512 мегабайт
Лавруша в некоторых клетках поля N * M расставил фишки. Он хочет выбрать
ромб, который полностью лежит на поле и который содержит как можно больше
фишек. К тому же Лавруша хочет, чтобы в ромбе не было ни единой пары фишек,
которые стоят в клетках с общей стороной.
Формат входного файла
В первой строчке заданы два числа N и M (1 ≤ N, M ≤ 3000). Следующие N строк
содержат по M символов каждый. Символом ‘*’ Лавруша обозначает фишку, а
символом ‘.’ – свободную клетку.
Формат выходного файла
Выведите единственное число K – количество фишек в найденном ромбе.
Пример
стандартный ввод
2 3
...
..*
3 3
*.*
...
*.*
3 3
.*.
*.*
.*.
стандартный вывод
1
1
4
Страница 7 из 12
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
Задача F. Бомбёжка
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти
стандартный ввод
стандартный вывод
1 секунда
64 мегабайт
Аня и Женя любят играть в компьютерные игры. Одна из игр в которую они
играют, заключается в том, чтобы убить террориста который скрывается в
бомбоубежищах. Система бомбоубежищ состоит из N бункеров, которые соединены
подземными коридорами, каждый следующий бункер соединен с предыдущим. Аня
и Женя по очереди выбирают один из оставшихся в живых бункеров, и бомбят его,
при этом кроме самого бункера, куда спущена бомба, взрывается еще и два соседних.
В случае бомбежки одного из крайних бункеров, взрывается только один соседний,
если же он конечно до сих пор еще не был взорван.
Естественно террорист очень хитер, и он всегда успевает убежать от бомбы по
подземным коридорам к бункерам, которые еще не были взорваны. Так продолжается
до тех пор, пока не будет взорван последний бункер. Так как Аня и Женя ходят по
очереди, выигравшим считается тот, кто убьет террориста — т.е. тот, кто взорвет
последний бункер.
Пример игры. 10 бункеров. Аня ходит первой, и, допустим, взрывает 5-й бункер,
тогда в живых остаются бункеры с первого по третий и с седьмого по десятый. Женя
может спустить бомбу только на один из этих оставшихся. Допустим, он скидывает
бомбу на второй бункер. Тогда для Ани остаются бункеры с седьмого по десятый. В
этой ситуации, которая получилась, Аня может оставить в живых либо 2 бункера
стоящие рядом, либо один бункер вовсе. В любом случае Женя окажется
победителем.
Требуется написать программу, которая определяла бы, кто из них выиграет при
правильной игре: Аня или Женя.
Формат входного файла
В единственной строке входного файла находится целое положительное число,
не превосходящее 10100000.
Формат выходного файла
В выходной файл в единственной строке выведите 1, если выиграет Аня (она
ходит первая), или 2, если выиграет Женя. Подразумевается, что оба игрока
придерживаются оптимальной стратегии.
Страница 8 из 12
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
Пример
стандартный ввод
1
4
52
стандартный вывод
1
2
1
Страница 9 из 12
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
Задача G. Робот
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти
стандартный ввод
стандартный вывод
2 секунды
64 мегабайт
Компания Booble вплотную занялась разработкой роботов. Первый робот,
которого они решили произвести, должен выполнять следующую задачу. Имея в
своем распоряжении N кубиков, на каждой гране которого написано по одной букве,
составить из них заданное слово длины N. Заданное слово должно отображаться на
верхних гранях кубиков в правильном порядке.
Эту простую задачу робот должен выполнять как можно меньше затратив
энергии. Для этого программистам из этой компании поручили задание – написать
программу, оптимизирующую усилия робота для составления слова.
Все кубики пронумерованы от 1 до N и лежат вначале последовательно,
согласно своим номерам.
Робот может выполнять следующие команды:
– если у него в руках пусто, подойти к любому кубику и взять его;
– если у него в руках кубик, повернуть его так, что одна из четырех боковых
граней станет верхней;
– если у него в руках кубик, подойти к любому месту и положить туда кубик.
При этом, если на месте куда робот ложит кубик уже стоит другой, он берет
его в руки.
Первую операцию робот выполняет затрачивая мало энергии, можно считать
что она равна нулю. Операция с поворотом кубика стоит 1 ед. энергии. Операция с
движением робота держа в руках кубик, стоит пропорционально расстоянию которое
он проходит, каждый пройденный кубик – 1 ед. энергии (движение робота без кубика
ничего не стоит).
Напишите программу, которая вычислит минимальную энергию, которую
нужно потратить роботом для составления слова.
Формат входного файла
В первой строке входного файла задано N (1 ≤ N ≤ 50) – количество кубиков. Во
второй строке задано слово длиной N, состоящее из маленьких латинских букв –
слово которое робот должен составить. В следующих N строках содержатся описания
начального положения кубиков, слова из латинских маленьких букв длиной 6. 1-й
символ означает букву на верхней гране, со второго по пятый символ – буквы на
Страница 10 из 12
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
боковых гранях, 6-й символ – буква на нижней гране. Кубики изначально стоят слева
на право, в том порядке, в котором указаны во входных данных.
Формат выходного файла
В выходной файл в единственной строке необходимо вывести число,
означающее минимальную энергию необходимую роботом для составления слова.
Слово обязательно должно быть составлено так, чтобы первая буква была на месте
где стоял 1-й кубик, вторая на месте второго и т.д. Если ответа не существует, нужно
вывести -1.
Пример
стандартный ввод
3
abc
bbbbbb
cccccc
aaaaaa
3
abc
ccccac
bbbbbb
aaaaac
3
abc
ccccac
bbbbbb
ccccca
2
ab
ccccac
eeeeee
стандартный вывод
4
3
1
-1
Пояснение к примеру
В первом тесте робот должен взять 3-й кубик и поставить его на место 1-го, взяв
его в руки и поставив на место 2-го, взяв его в руки и поставив на место 3-го.
Во втором тесте нужно перевернуть один раз 1-й кубик, два раза 3-й кубик.
В третьем тесте нужно перевернуть 1 раз 1-й кубик.
В четвёртом тесте выложить слово не возможно.
Страница 11 из 12
Десятая юбилейная международная открытая студенческая олимпиада
по программированию им. С.А. Лебедева и В.М. Глушкова
Киев, 2015
Задача H. Монета
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти
стандартный ввод
стандартный вывод
1 секунда
64 мегабайт
Петя нашел на улице монету. На одной стороне монеты была нарисована буква
‘T’, на другой стороне ‘H’. Он стал подбрасывать монету и записывать в свой блокнот
последовательность букв ‘T’ и ‘H’, которая в результате получалась.
На следующий день Петя открыл блокнот и увидел там свою
последовательность, записанную им вчера. Он задался вопросом - какое среднее
количество подбрасываний необходимо для того, чтобы получить ее снова.
Представим, что монета правильная, т.е. ‘T’ и ‘H’ выпадают всегда с одинаковой
вероятностью. Петя подбрасывает монету до тех пор, пока в возникающей
последовательности букв не получится искомая последовательность.
Формат входного файла
В первой строке файла задано N (1 ≤ N ≤ 105), длина последовательности. Во
второй строке задана сама последовательность Si (Si = {‘T’, ‘H’}, 1 ≤ i ≤ N).
Формат выходного файла
Вам необходимо вычислить математическое ожидание количества
подбрасываний монеты. Так как ответ может быть очень большим, выведите в
единственной строке целую часть от логарифма по основанию 2 от математического
ожидания - [log2(M)], где M - мат. ожидание количества бросков.
Пример
стандартный ввод
2
TH
2
TT
стандартный вывод
2
2
Пояснение к примеру
В первом тесте M = 4, во втором тесте M = 6.
Страница 12 из 12
Download