Processing math: 100%

Республиканская олимпиада по информатике, 2012 год, 9 класс


(Кардано)
Ограничение по времени:
2 секунды
Ограничение по памяти:
64 мегабайта

Решетка Кардано — инструмент шифрования, представляющий собой специальную квадратную таблицу-карточку размера N×N, часть ячеек которой вырезана. Длина сообщения, которое нужно зашифровать, должна быть равна N2 символов. Решетка Кардано накладывается на бумагу и сообщение выписывается по одному символу в вырезанную ячейку. Когда вырезанные ячейки окажутся заполнены решетка поворачивается на 90 градусов по часовой стрелке и процесс продолжается. Так повторяется еще 2 раза.
Назовем решетку «правильной», если при шифровании ни один символ не наложится на другой и «неправильной» в противном случае. Назовем «правильную» решетку «хорошей», если все N2 символов исходного сообщения будут записаны, и «плохой» — в противном случае.
Для заданных решеток, определите, правильные ли они, а для правильных — хорошие или плохие.
Формат входного файла
Первая строка входного файла содержит одно целое число K (1K10) — количество решеток для проверки. Затем следует описание K решеток. Описание каждой решетки начинается со строки, содержащей целое число N (1N100) — размер решетки. Затем следует N строк, содержащих N символов каждая. Символ «*» означает невырезанную часть решетки, «.» — вырезанную.

Формат выходного файла
Выходной файл должен содержать K строк — по одной для каждой таблицы. Если соответствующая решетка неправильная, выведите «INCORRECT», если плохая — «BAD», если хорошая — «GOOD».
Примеры:
Вход
3
2
.*
*.
4
.***
****
**.*
****
4
**.*
*.**
****
.*.*
Ответ
INCORRECT
BAD
GOOD

комментарий/решение
(Строчная арифметика)
Ограничение по времени:
2 секунды
Ограничение по памяти:
64 мегабайта

Для двух строк S=s1s2s3sn и T=t1t2t3tm определим операцию сложения следующим образом: R=S+T=s1s2s3snt1t2t3tm, операцию умножения следующим образом: R=ST=s1t1s1t2s1t3s1tms2t1s2tmsnt1sntm. Заметьте, что в общем случае (ST)RS(TR), поэтому операции умножения нужно выполнять последовательно слева направо. Как обычно, операция умножения имеет больший приоритет.
Дается выражение на строках с операциями сложения и умножения. Посчитайте количество символов в строке-результате.
Формат входного файла
Единственная строка входного файла содержит арифметическое выражение, использующее операции сложения и умножения, а в качестве аргументов — строки, состоящие из строчных букв английского алфавита. Строка не содержит пробелов и ее длина не превышает 100 символов. В строке присутствуют только символы «+», «*» и строчные буквы английского алфавита.
Формат выходного файла
Выведите одно число без ведущих нулей — ответ к задаче.
Примеры:
Вход
ab*cd*ef+g*h
Ответ
34
Замечание
В 70% тестов ответ не превышает 1018.

комментарий/решение
(Быки и коровы)
Ограничение по времени:
2 секунды
Ограничение по памяти:
64 мегабайта

В этой задаче Вам предлагается сыграть в известную игру «Быки и коровы». Компьютер загадывает число из 4-х различных цифр от 1 до 9, а Ваша программа должна его отгадать с нескольких попыток. Попытка — это 4-значное число с неповторяющимися цифрами. В ответ на попытку Вашей программе будет даваться ответ в виде целого числа, равного 10X+Y, где X — количество цифр, угаданных на неправильных позициях, а Y — количество цифр, угаданных на верных позициях. Таким образом, в случае если программа правильно угадала загаданное число, код ответа будет равен 4. В этом случае программа должна завершиться. Учтите, что количество потраченных попыток будет учитываться при подсчете оценки за тест.
    Ваша программа должна делать попытки, вызывая функцию guess(x), параметром и результатом которой является целое число. Повторный вызов guess с аргументом, который ранее использовался, либо передача в качестве аргумента не 4-х значного числа, либо числа, содержащего одинаковые цифры, либо числа, содержащего цифру 0, считается ошибкой.
    Для правильной работы Вашей программы необходимо подключить библиотеку/модуль bullscows:
    C/C++: #include "bullscows.h"
    Pascal: uses bullscows;
    Функция объявлена следующим образом:
    C/C++: int guess(int x); Pascal: function guess(x : longint) : longint;
    Оценка будет происходить следующим образом. Пусть T — полный балл за тест, a R — балл, полученный программой. Если Ваша программа угадывает число не более чем за 7 попыток, то R=T, если больше чем за 7, то не больше, чем за 10, то R=0.75T, если больше чем за 10, но не больше, чем за 14, то R=0.5T, если больше чем за 14, но не больше, чем за 30, то R=0.25T. В остальных случаях R=0.

комментарий/решение
(Клуб читателей)
Ограничение по времени:
2 секунды
Ограничение по памяти:
64 мегабайта

В клубе состоят N человек. Каждый месяц выходит новая книга, и Вы рассылаете ее членам клуба. Так как покупать всем по книге выйдет очень дорого, Вы можете разослать книги только определенным читателям. Читатели, получившие книгу снимают с нее несколько копий и рассылают всем своим хорошим знакомым в клубе. Читатели, получившие копию книги, делают то же самое. Если читатель A является хорошим знакомым читателя B, это не означает, что B является хорошим знакомым A.
    Вам известны все хорошие знакомые каждого читателя. Определите минимальное количество экземпляров книги, которое необходимо приобрести и отправить, чтобы все читатели клуба получили бы книгу или ее копию.
Формат входного файла
В первой строке входного файла задаются два целых числа N и M (1N10000, 1M100000). В следующих M строка задаются по два целых числа A и B: читатель с номером B — хороший знакомый читателя с номером A (1A,BN, AB). Числа в строках разделены пробелами.
Формат выходного файла
В первой строке выходного файла выведите минимальное количество экземпляров книги, которое необходимо отправить. Во второй строке — номера читателей, которые должны их получить. Если вариантов несколько, выведите любой.
Примеры:
Вход
5 5
1 2
1 3
3 1
2 4
5 4
Ответ
2
5 3
Вход
5 4
1 2
3 2
2 4
2 5
Ответ
2
3 1

комментарий/решение
(Медкомиссия)
Ограничение по времени:
2 секунды
Ограничение по памяти:
64 мегабайта

Начался весенний призыв и военкоматы заполнились призывниками. Начальникам военкоматов поступил запрос о продолжительности проведения медкомиссий. Один из них обратился к Вам за помощью.
    Каждый из N призывников должен пройти M медицинских кабинетов. В одном кабинете одновременно могут осматривать только одного призывника. После завершения осмотра в i-м кабинете призывник мгновенно попадает в очередь в i+1-й кабинет. Как только в каком-то кабинете освобождается место, его мгновенно заполняет призывник, стоящий первым в очереди в этот кабинет. После завершения осмотра в M-м кабинете призывник отправляется домой собирать вещи. Продолжительностью методкомиссии считается время между входом первого призывника в первый кабинет и выходом последнего призывника из M-го кабинета.
    Зная для каждого призывника время, которое он будет находиться в каждом кабинете (вы заранее обработали информацию из медицинской карточки), а также порядок входа в первый кабинет, определите продолжительность медкомиссии.
Формат входного файла
Первая строка входного файла содержит 2 целых числа N, M (1N105, 1M10). Каждая из следующих N строк содержит по M целых чисел, j-e число на i-й строке — время обследования i-гo призывника в j-м кабинете (1iN, 1jM). Время — целое число в интервале от 1 до 1000. Призывники нумеруются в порядке входа в первый кабинет.
Формат выходного файла
Выведите одно целое число — продолжительность проведения медкомиссии.
Примеры:
Вход
3 2
3 5
4 4
5 3
Ответ
15
Вход
3 1
3
4
5
Ответ
12

комментарий/решение
(ДНК)
Ограничение по времени:
2 секунды
Ограничение по памяти:
64 мегабайта

Одна из задач генетического анализа заключается в определении степени похожести двух последовательностей нуклеотидов. Последовательность нуклеотидов — это строка из букв A, G, C, T. Последовательности можно циклически сдвигать друг относительно друга. Степенью похожести двух последовательностей назовем максимально возможное количество совпадений символов в соответствующих позициях строк. Для заданных двух последовательностей определите степень их похожести.
Формат входного файла
Входной файл содержит две строки одинаковой длины, состоящие из символов A, G, C, T. Строки не пустые и их длина не превышает 50000.
Формат выходного файла
На первой строке выходного файла выведите целое число — степень похожести заданных строк. На следующих двух строках выведите исходные строки, циклически сдвинутые так, что достигается полученная степень похожести. Строки выводите в таком же порядке, как они даны во входном файле.
Примеры:
Вход
ACAGTG
AGTGTC
Ответ
5
ACAGTG
TCAGTG
Замечание
В не менее 50% тестов длина каждой строки не превышает 10000

комментарий/решение
(Простая задача)
Ограничение по времени:
2 секунды
Ограничение по памяти:
64 мегабайта

Имеется массив из N целых чисел. Могут поступать следующие запросы:
    S a b — записать в ячейку с номером a значение b (1aN, |b|106).
    R l r — перевернуть подмассив с позиции l до позиции r (1lrN).
    Q l r — вывести сумму элементов с позиции l до позиции r (1lrN).
Формат входного файла
В первой строке входного файла одно целое число N (1N100000.) В следующей строке даны N чисел, каждое из которых по абсолютному значению не превышает 106. В следующей строке дается одно целое число M — количество запросов (1M100000). В следующих M строках заданы запросы в том виде, в каком они описаны в условии.
Формат выходного файла
Для каждого запроса, начинающегося с Q, выведите одну строку — ответ на этот запрос.
Примеры:
Вход
4
1 2 3 4
4
Q 1 3
R 2 4
S 1 4
Q 1 3
Ответ
6
11
Замечание
В не менее 40% тестов N,M1000.

комментарий/решение
(Казарма)
Ограничение по времени:
2 секунды
Ограничение по памяти:
64 мегабайта

В казарме N рядовых солдат. Когда в казарму входит старший сержант, они строятся в ряд. После построения старший сержант идет от первого солдата к последнему и по своему желанию выбирает троих. Эти солдаты делают шаг вперед. Если они стоят в порядке возрастания роста, то у командира хорошее настроение, и он отпускает всех. Если он никак не может выбрать трех солдат так, чтобы у него было хорошее настроение, он злится и заставляет всех бегать весь день.
    Известно, что у всех солдат рост разный. Один любопытный солдат хочет знать, сколькими способами все солдаты могут встать в строй так, чтобы старший сержант был доволен. Так как ответ может быть большим, выведите его по модулю M.
Формат входного файла
В единственной строке входного файла задаются два целых числа N и M, разделенных пробелом (3N25000, 1M2109).
Формат выходного файла
Выведите ответ к задаче.
Примеры:
Вход
3 10000
Ответ
1
Вход
5 10000
Ответ
78
Замечание
В не менее 20% тестов N10. В не менее 50% тестов N500. В не менее 75% тестов N4000.

комментарий/решение
результаты