Вы находитесь на странице: 1из 4

SPb IFMO Trainings

Training 14, November 9, 2010

Problem A. Практическая геология • Записать в два неинициализированных подряд идущих


Input file: geology.in бита, то есть в биты с номерами i и i + 1 (1 ≤ i < n), два
Output file: geology.out различных значения;

Одной небольшой, но очень талантливой группе ученых • Записать в два идущих подряд бита, один из которых —
удалось разработать принципиально новый способ работы с неинициализированный, а значение другого равно x, два
рельефом местности. Они разработали установку, которая различных значения, не равных x.
будучи помещенной в некоторую точку, увеличивает высоту
рельефа (над уровнем моря) в ее окрестности. К примеру, для n = 4 возможная процедура инициализации
такова: uuuu → uuab → ucbb → babb; здесь символом u
В данный момент проект находится в разработке и вам обозначаются неинициализированные биты.
поручено разработать модуль программного комплекса,
сопровождающего установку. Поставленная задача выглядит Напишите программу, которая: читает из входного
так: в начальный момент времени рельеф представляет файла последовательность значений, которой надо
собой прямую, высота всех точек которой равна нулю. инициализировать память, проверяет, что такая
Далее в некоторые точки прямой помещаются разработанные инициализация возможна и выводит ответ в выходной
учеными излучатели. Их мощность регулируется таким файл.
образом, что если излучатель помещен в точку x, то рельеф Input
меняется следующим образом: в точке x высота увеличивается
Во входном файле содержится один или несколько наборов
на p, а далее для произвольной точки x1 ее высота равна
входных данных. В первой строке находится одно целое число
h + max(p − |x − x1 |, 0), где h — старая высота точки,
T (1 ≤ T ≤ 10) — количество наборов. Каждый набор
а p — мощность излучающей установки. Периодически
описывается двумя строками. Первая из них содержит целое
геологов интересует информация о том, какая площадь земли
число li (1 ≤ li ≤ 100 000) — размер памяти ТБК. Вторая
находится под точками рельефа по координате y между
строка содержит li символов, каждый из которых равен a,
произвольными точками i1 и i2 по координате x. Предоставьте
b или c — последовательность значений, которыми надо
им ее.
инициализировать память ТБК.
Input
Output
В первой строке входного файла находится число n —
Выведите в выходной файл T строк, по одному слову на
количество операций, выполняемых с прямой (1 ≤ n ≤ 105 ).
каждой. В i-ой строке должно стоять слово “YES”, если для
Далее следует n строк, описывающих сами операции. Строка
i-го набора входных данных инициализация возможна, и “NO”
имеет вид либо «ADD x p» — в таком случае установка
в противном случае.
мощности p помещается в точку x, либо «QUERY x1 x2 » —
тогда геологов интересует площадь земли на прямой от Examples
точки x1 до точки x2 . Все числа во входном файле целые, bit.in bit.out
1 ≤ x, x1 , x2 ≤ 105 , 1 ≤ p ≤ 106 .
2 NO
Output 4 YES
aabb
Для каждой операции QUERY выведите площадь земли между
4
точками x1 и x2 с точностью до 3 знаков после запятой.
aaab
Examples
geology.in geology.out Problem C. Квантовый трибитный
4 0.500
ADD 2 1 0.500
компьютер
QUERY 1 2 1.000 Input file: bit2.in
QUERY 2 3 Output file: bit2.out
QUERY 1 3
Проект трибитного компьютера оказался провальным, однако
учёные не унывают и уже приступили к разработке
техники следующего поколения — Квантового Трибитного
Problem B. Трибитный компьютер Компьютера (КТБК). Они считают проект ТБК лишь
Input file: bit.in разминкой перед скорым открытием, которое потрясёт весь
Output file: bit.out мир.
Учёные королевства Байтландии решили создать новый Учёные опять говорят про мощь своего нового детища, про
тип компьютера — трибитный компьютер (ТБК). По их череду связанных с его разработкой мелких технических
прогнозам выходит, что эта машина сможет помочь в проблем, и так далее в том же духе. К делу.
решении многих сложных и ещё не решённых задач. Однако,
Вас опять привлекли к решению проблем, связанных с
сначала им предстоит справиться с некоторыми техническими
инициализацией. Конечно, с квантовыми компьютерами
сложностями. Ваша задача — помочь учёным решить одну из
всё далеко не так просто, как с обычными — ведь,
возникших проблем.
изменив состояние одного квантового бита, вы неизбежно
Учёных сейчас интересует то, как будет инициализироваться влияете на состояния всех остальных. Если учитывать
память нового компьютера. Тестовая сборка ТБК имеет это влияние и последовательно инициализировать все
n битов памяти, пронумерованных от 1 до n. Каждый биты памяти, затраты времени будут просто огромными.
бит может принимать одно из трёх значений a, b, c, или Поэтому предлагается использовать другой подход. Учёные
же пребывать в неинициализированном состоянии. ТБК разработали широкомасштабные управляемые импульсы
поддерживает следующие две операции для инициализации (ШУИ), которые одинаковым образом изменяют состояния
битов своей памяти: всех квантовых битов компьютера, причём характер

Page 1 of 4
SPb IFMO Trainings
Training 14, November 9, 2010

изменений известен заранее. ШУИ также удобны тем, что не Вам известны некоторые подробности о дружеских (да
занимают много времени. и о недружеских) отношениях между террористами, что
позволяет вам достаточно точно определять, в кого он будет
Первый вопрос, на который необходимо ответить —
стрелять при своем ходе. Более формально, вам задана
существует ли такая последовательность применения
некоторая матрица A целых чисел. Пусть ходит террорист
импульсов, что после неё вся память КТБК зануляется.
с номером i. Посчитаем число S — сумму aij по всем j —
Напишите компьютерную программу, которая решит эту
номерам террористов, которые еще живы и j 6= i. Тогда
задачу.
вероятность выбора для стрельбы террориста с номером k 6= i
Формально, каждый бит памяти может пребывать в равна aSik . При этом террорист с номером k должен быть
одном из n состояний, пронумерованных числами 0, 1, обязательно жив.
. . . , n − 1. Импульс f можно рассматривать как функцию
Террористы все разные, кто-то лучше стреляет, кто-то может
f : {0, 1, . . . , n − 1} → {0, 1, . . . , n − 1}; эта функция
хитро пригнуться, если выстрелили в него, поэтому результат
применяется сразу ко всем битам памяти. Например,
выстрела может быть каким угодно. А именно, вероятность
если f (3) = 5, то при применении импульса f все биты,
того, что террорист с номером k умрет после того как в него
находившиеся в состоянии 3, перейдут в состояние 5.
выстрелил террорист с номером i, равна bik . Причем число bii
Учёные умеют применять импульсы f1 , f2 , . . . , fk . Требуется
может быть каким угодно, но сам в себя террорист стрелять
выяснить, существует ли последовательность импульсов,
никогда не будет.
которая независимо от начального состояния памяти
переводит все биты в состояние 0. Вам нужно посчитать, сколько в среднем ходов в данной игре
будет сделано, прежде чем она закончится.
Напишите программу, которая: читает из входного файла
последовательность импульсов, проверяет, что обнуление всей Input
памяти возможно и выводит ответ в выходной файл.
Первая строка входного файла содержит число n —
Input количество террористов (2 ≤ n ≤ 15). Далее следует n строк
по n целых чисел — матрица A (1 ≤ aij ≤ 10000). И затем n
Во входном файле содержится один или несколько наборов
строк по n вещественных чисел — матрица B (0.001 ≤ bij ≤ 1).
входных данных. В первой строке находится одно целое число
T (1 ≤ T ≤ 10) — количество наборов. Каждый набор Output
описывается несколькими строками. Первая из них содержит
Выведите, сколько в среднем потребуется ходов для
два целых числа — n и k (1 ≤ n ≤ 200, 1 ≤ k ≤ 5).
завершения игры, с точностью не менее 5 знаков после
Здесь n — количество состояний одного бита памяти, а k —
запятой.
количество различных импульсов, которые можно применить.
Следующие k строк содержат описания импульсов, по одному Examples
на строке; i-ая из этих строк содержит f0i , f1i , . . . , fn−1
i
, причём game.in game.out
i
fj — значение, которое принимают биты в памяти в состоянии 2 2.00000
j под действием импульса i. 1 1
Output 1 1
0.5 0.5
Выведите в выходной файл T строк, по одному слову на
0.5 0.5
каждой. В i-ой строке должно стоять слово “YES”, если для
i-го набора входных данных зануление всей памяти возможно,
и “NO” в противном случае. Problem E. Загадочная карта
Examples Input file: map.in
bit2.in bit2.out Output file: map.out
2 NO Петя и Андрюша нашли на чердаке загадочную карту. Они
5 2 YES подозревают, что на карте изображен фрагмент пещеры,
1 2 3 4 0 которая находится неподалеку. Однако они не уверены в своем
2 3 4 0 1 предположении.
5 2
1 2 3 4 0 В пещере находится n залов, соединенных коридорами.
3 3 4 0 1 Известно, что из любого зала можно добраться по коридорам
до любого другого единственным способом.
На карте изображено m кружков, некоторые из которых
Problem D. Веселая игра соединены отрезками. Петя и Андрюша заметили, что и на
карте от любого кружка до любого другого можно добраться
Input file: game.in по отрезкам единственным способом. Они считают, что
Output file: game.out карта могла получиться из полной карты пещеры удалением
В террористических лагерях радикальной группировки «For- кружков, изображающих некоторые пещеры, и исходящих из
mat C:» очень популярна следуюшая игра: в круг становятся них коридоров.
n террористов и по очереди стреляют друг в друга, пока Помогите Пете и Андрюше понять, может ли изображение на
не останется только один, который объявляется победителем. найденной ими карте быть получено указанным способом?
Первым стреляет террорист с номером 1, далее террорист с
номером 2 и т.д. После террориста с номером n снова стреляет
Input
террорист с номером 1. Если террорист, который должен Первая строка входного файла содержит число m
стрелять, уже убит, то ход переходит к следующему. При (2 ≤ m ≤ 500). Следующие m − 1 строк содержат описание
своем выстреле террорист может сам выбирать, в кого ему отрезков, каждая строка содержит два числа от 1 до m —
стрелять. номера кружков, соединенных соответствующим отрезком.

Page 2 of 4
SPb IFMO Trainings
Training 14, November 9, 2010

Следующая строка входного файла содержит число n максимальную сумму, которую можно получить, сделав k
(m ≤ n ≤ 500). Следующие n − 1 строк содержат описание ходов на графе.
коридоров пещеры.
Examples
Output maxsum.in maxsum.out
Если карта может быть фрагментом карты пещеры, выведите 3 4 5 16
«YES» на первой строке выходного файла. Обозначим как ai 1 3 4
номер пещеры, которой соответствует i-й кружок. На второй 1 2
строке выведите m чисел: a1 , a2 , . . . , am . 2 2
Если карта не может быть фрагментом карты пещеры, 2 1
выведите «NO» на первой строке выходного файла. 1 3

Examples
Problem G. Скобки
map.in map.out Input file: parenth.in
5 NO Output file: parenth.out
1 3
2 3 Правильной скобочной последовательностью называется
3 4 такая последовательность круглых и квадратных
3 5 скобок, которая могла бы встречаться в каком-нибудь
6 арифметическом выражении. Например, последовательности
1 2 ()[] и ([]) являются правильными скобочными
2 3 последовательностями, а последовательности (][) и )()(
2 4 — нет. Считается, что круглые и квадратные скобки
4 5 равноправны, но круглой открывающей скобке обязательно
4 6 должна соответствовать круглая закрывающая, а квадратной
— квадратная.
5 YES
1 3 1 3 2 4 6 Скобки считаются упорядоченными в таком порядке: ‘(’, ‘)’,
2 3 ‘[’, ‘]’. Например, ‘)’ больше чем ‘(’, но меньше чем ‘[’, а
3 4 максимальной из всех скобок считается ‘]’.
4 5
Говорят, что одна скобочная последовательность
6
лексикографически меньше другой, если существует такое
1 2
число k, что первые k скобок в них совпадают, а k + 1-ая
2 3
скобка в первой меньше, чем во второй.
2 4
4 5 Программист Вася выписал на бумажке все правильные
4 6 скобочные последовательности длины 2n таким образом,
что каждая написанная скобочная последовательность
лексикографически меньше следующей за ней. Он очень
Problem F. Максимальная сумма обрадовался, что теперь может по лексикографическому
Input file: maxsum.in номеру скобочной последовательности найти саму
Output file: maxsum.out последовательность (последовательности, записанные на
бумажке, нумеруются, начиная с 1). Однако бумажка
Задан ориентированный граф, имеющий n вершин и m рёбер.
потерялась... А повторять эту огромную работу Васе лень...
В каждой вершине i графа записано некоторое целое число ci .
Помогите бедному Васе написать программу, которая бы
Рассмотрим следующую игру на этом графе. Сначала игрок
выдавала правильную скобочную последовательность по ее
ставит фишку в вершину 1 и получает c1 очков. Затем он
лексикографическому номеру!
делает k ходов; каждый ход состоит в перемещении фишки по
ребру, исходящему из текущей вершины, и после каждого хода Input
игрок получает количество очков, равное числу, записанному Во входном файле задано число n (1 ≤ n ≤ 20) и произвольное
в вершине, куда он перешёл. натуральное число A — лексикографический номер искомой
Зная, что граф таков, что игрок сможет сделать k ходов последовательности.
из начальной вершины, найдите максимальную сумму очков, Output
которую он сможет при этом набрать.
В первой строке выходного файла должна содержаться
Input искомая скобочная последовательность.
В первой строке входного файла заданы три числа — n, m и Example
k (2 ≤ n ≤ 20, 1 ≤ m ≤ 400, 1 ≤ k ≤ 1015 ).
parenth.in parenth.out
Во второй строке записаны n чисел c1 c2 . . . cn через пробел
2 1 (())
(1 ≤ cj ≤ 100). Это числа, записанные в вершинах.
2 ()[]
Следующие m строк содержат по два числа ui и vi каждая 3
(1 ≤ ui , vi ≤ n); эти числа обозначают, что в графе есть ребро
из ui в vi .
Все числа во входном файле — целые.
Output
В первую строку выходного файла выведите число S —

Page 3 of 4
SPb IFMO Trainings
Training 14, November 9, 2010

Problem H. Радиотерапия раковых опухолей Input


Первая строка содержит сжатую по алгоритму RLE строку.
Input file: radio.in Строка содержит не более 50 000 блоков RLE. Каждый
Output file: radio.out множитель не превышает 109 .
При радиотерапии раковых опухолей важно уделять особое Вторая строка содержит число m (1 ≤ m ≤ 100 000). Далее
внимание регулированию интенсивности излучения. При следует m чисел в интервале от 1 до длины строки, заданной
выборе интенсивности возникает следующая задача. первой строкой.
Задана матрица A размера m × n, состоящая из нулей и Output
единиц, для которой выполнено следующее условие: если Для каждого запроса qi во выходном файле выведите одно
aij = 1 и akj = 1 то для всех i ≤ l ≤ k выполнено alj = 1. число — π(qi ).
Интенсивность радиационной установки в различные Examples
моменты времени равна x1 , x2 , . . . , xn . Для того, чтобы
лечение было эффективным, для всех i от 1 до m должно rle.in rle.out
выполняться условие: ai1 x1 + ai2 x2 + . . . + ain xn = bi . Кроме 3a3b4a2b 0
того, чтобы суммарное излучение, полученное больным, 5 2
было как можно менее опасным, необходимо минимизировать 1 3 4 10 12 0
величину v = c1 x1 + c2 x2 + . . . + xn cn . 3
5
По заданным матрице A и векторам b и c найдите
оптимальную интенсивность установки во все моменты
времени. Интенсивность xi должна быть целым Problem J. Игра в слова
неотрицательным числом, не превышающим 109 . Input file: wordgame.in
Input Output file: wordgame.out

Первая строка входного файла содержит числа m и n Вася играет в следующую игру. Сначала он выбирает
(1 ≤ m ≤ 500, 1 ≤ n ≤ 500. Следующие m строк содержат по натуральное число k. Затем он выбирает какое-нибудь слово
n чисел каждая — матрицу A. Следующая строка содержит w, состоящее из первых k маленьких букв латинского
m чисел — вектор b. Затем следует n чисел — вектор c. алфавита, и натуральное число n. После этого он начинает
Вектора b и c состоят из целых неотрицательных чисел, не выписывать подряд случайные буквы (тоже из первых k
превышающих 104 . маленьких букв латинского алфавита), пока не окажется, что
выписанная строка содержит слово w хотя бы n раз.
Output
Считая, что выписываемые буквы независимы и
Если подобрать искомый набор интенсивностей xi возможно,
равновероятны, сколько в среднем букв ему потребуется
выведите на первой строке выходного файла число v. На
выписать?
второй строке выведите n чисел — x1 , x2 , . . . , xn .
Input
В противном случае выведите в выходной файл число −1.
Первая строка входного файла содержит два числа, k и n,
Examples 1 ≤ k ≤ 26, 1 ≤ n ≤ 1 000 000. Вторая строка входного файла
radio.in radio.out содержит слово w, длина которого заключена между 1 и 300
3 4 4 (включительно).
1 0 1 1 3 2 1 0
Output
1 0 0 1
1 1 0 1 Выведите в выходной файл ожидаемое количество букв
4 3 5 ровно с 6 знаками после десятичной точки, округляя
0 1 2 3 до ближайшего такого числа. В случае, если ближайших
несколько, округляйте до любого из них.
Problem I. RLE + KMP Examples
Input file: rle.in wordgame.in wordgame.out
Output file: rle.out 2 1 2.000000
a
Алгоритм сжатия RLE работает следующим образом:
рассмотрим строку s длины n, состоящую из маленьких 3 2 57.000000
букв латинского алфавита. Разрешается заменить блок из k cbc
последовательных одинаковых букв x на строку kx. Фрагмент
kx, а также отдельный символ, называется блоком RLE, k
называется множителем.
Например, строка «abbbbcccadddddaa» может быть
закодирована как «a4b3ca5d2a».
Напомним, что префикс-функцией называется функция
π : {1, . . . , n} → Z, определенная соотношением

π(i) = max{j|0 ≤ j < i, s[1 . . . j] = s[i − j + 1 . . . i]}.

Задана строка, сжатая по алгоритму RLE и m запросов qi .


Для каждого запроса выведите π(qi ).

Page 4 of 4