Темы
    Информатика(2656 задач)
---> 167 задач <---
Источники --> Командные олимпиады --> Командные чемпионаты школьников Санкт-Петербурга по программированию
    1999(5 задач)
    2000(7 задач)
    2001(8 задач)
    2002(8 задач)
    2003(9 задач)
    2004(9 задач)
    2005(10 задач)
    2006(10 задач)
    2007(10 задач)
    2008(9 задач)
    2009(10 задач)
    2010(10 задач)
    2011(9 задач)
    2012(10 задач)
    2013(10 задач)
    2014(11 задач)
    2015(11 задач)
    2016(11 задач)
Страница: << 25 26 27 28 29 30 31 >> Отображать по:
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

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

Работа еще не завершена, поэтому пока что он умеет обрабатывать строки только одним способом. Строка, которую ему передают на ввод, должна состоять из \(2^k\) символов, а программа обработки этой строки — из \(2^k \ − \ 1\) чисел, каждое из которых является нулем или единицей.

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

Сначала он разобьет строку на две части равной длины, а программу — на три части. При этом длины первых двух частей программы будут равны между собой, а третьей частью будет последнее число программы. После этого первая половина строки превратится в результат ее обработки первой частью программы, а вторая — в результат ее обработки второй частью программы. После этого, если оставшееся число равно нулю, вторая половина строки будет дописана справа к первой, если же оно равно единице — первая половина будет дописана справа ко второй.

Так, например, если на вход сопроцессору подана строка «abcd» и программа (0, 1, 1), то результатом обработки будет строка «dcab».

Вам поступило предложение принять участие в его тестировании. Отказаться от такого лестного предложения вы не смогли, поэтому теперь вам необходимо научиться составлять программу для сопроцессора, с помощью которой он преобразует строку \(S\) в строку \(T\), или же определять, что такой программы не существует.

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

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

Первая строка описания очередного случая содержит строку \(S\), состоящую только из строчных букв латинского алфавита. Длина строки \(S\) равна \(2^k\) , где \(1 \le k \le 16\). Вторая строка описания очередного случая содержит строку \(T\), также состоящую только из строчных букв латинского алфавита. Длина строки \(T\) равна длине строки \(S\).

Суммарная длина всех строк \(S\) в одном входном файле не превышает \(100 000\).

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

Для каждого случая в очередной строке выходного файла слово «Yes», если программа для сопроцессора, преобразовывающая строку \(S\) в строку \(T\) существует, и «No» в противном случае.

Если ответ «Yes», в следующей строке выведите \(2^k \ − \ 1\) чисел, разделенных пробелами — программу, которую для этого преобразования необходимо передать сопроцессору. Если таких программ несколько — выведите любую.

Примеры
Входные данные
2
abacabab
baababca
abacabab
bbaaabca
Выходные данные
Yes
0 1 0 1 0 0 1
No
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

На прошлом уроке английского Пете задали домашнее задание. Оно заключалось в разгадывании ребусов. Каждый ребус — это последовательность картинок. С двух сторон от каждой картинки могут располагаться апострофы. Каждая картинка обозначает некоторое слово. Предположим, что перед некоторой картинкой нарисовано \(i\) апострофов, а после нее \(j\) апострофов. Это значит, что у слова, которое сопоставляется картинке, необходимо убрать \(i\) букв с начала и \(j\) с конца, а оставшуюся его часть записать вместо картинки и апострофов. Так необходимо сделать с каждой картинкой и окружающими ее апострофами. После этого нужно «склеить» получившиеся кусочки в одно слово. Оно и будет разгадкой ребуса.

У Пети нет проблем с тем, чтобы сопоставить каждой картинке слово. Но ему очень лень заниматься отбрасыванием лишних букв и склеиванием слов. Поэтому он попросил вас помочь ему. Дана строка, которая состоит из маленьких латинских букв, апострофов (символов с кодом 39), а также пробелов, которые разделяют слова. Апостроф относиться к некоторому слову, если между ними нет пробела. Если апостроф стоит слева от слова, то у него необходимо убрать одну букву с начала, если справа — с конца. Потом необходимо склеить все слова в одно.

Например, пусть дана строчка «team ’ ’ ’ ’ school ’ ’ olympiad’ ’ ’». В первом слове ничего изменять не надо, так как к нему не относится ни один апостроф. Во втором необходимо убрать первые четыре буквы и получить «ol», из третьего слова получится «ymp». После скеливания трех кусочков получим строку «teamolymp».

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

В первой строке входного файла дан ребус, длиной не более 100 символов, который необходимо решить. Гарантируется, что в строчке присутствуют только апострофы (код символа — 39), пробелы и маленькие латинские буквы, а также, что ребус корректен — нет слова, у которого нtобходимо удалить букв больше, чем его длина.

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

Выведите одно слово — ответ на ребус.

Примеры
Входные данные
team ''''school ''olympiad'''
Выходные данные
teamolymp
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

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

Профессор обозначил эти символы буквами от ‘a’ до ‘j’, но не может понять, какой цифре соответствует какой символ. Тогда вождь племени дал ему список из n неотрицательных чисел, записанных без ведущих нулей, и сказал, что числа в нем отсортированы строго по возрастанию.

Помогите профессору восстановить по этому списку какое-нибудь соответствие символов цифрам.

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

В первой строке входного файла дано одно натуральное числа \(n \ (2 \le n \le 10)\) — количество слов в списке. Следующие \(n\) строк содержат выданные вождем числа племени тив, по одному числу в строке. Длина каждого числа не превышает \(9\).

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

В первой строке файла выведите «Yes», если ответ существует, в этом случае в следующей строке выведите цифры, которые соответствуют символам, обозначенным ‘a’..‘j’, в этом порядке. Если существует несколько ответов, то выведете любой из них.

Если профессор понял что-то неправильно, и ответа не существует, выведете «No».

Примеры
Входные данные
4
a
da
dd
cc
Выходные данные
Yes
0 1 3 2 4 5 6 7 8 9
Входные данные
4
a
j
jb
ac
Выходные данные
No
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

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

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

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

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

В первой строке входного файла даны два вещественных числа \(R\) и \(L\) — радиус торта и длина лезвия соответственно с не более чем тремя знаками после десятичной точки (\(1 \le R, \ L \le 1000\)).

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

Первая строка выходного файла должна содержать координаты первой точки на границе, вторая строка координаты второй точки. Расстояние от точек до центра должно отличаться от \(R\) не более чем на \(10^{−6}\) . Расстояние между точками должно отличаться от максимально возможной хорды не превосходящей \(L\) не более чем на \(10^{−6}.\)

Пояснение к примеру

Одно из возможных расположений разреза во втором примере.

Примеры
Входные данные
1.0 2.0
Выходные данные
-1.0 0
1.0 0.0
Входные данные
1.0 1.71
Выходные данные
-1.0 0
0.46204999999999985 0.8868538760697842
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

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

Недавно археологи обнаружили странную находку, предположительно летопись некоторых событий, которая может раскрыть берляндским историкам причину исчезновения столь могущественного общества — стопку из дюжины блестящих тонких дисков из неизвестного материала, нанизанных на алмазный стержень. На верхнем диске ученые обнаружили три числа, каждое из которых состоит из двух цифр. Ученые предположили, что на диске записана дата конца великой цивилизации.

После анализа дисков было установлено, что они использовались в XXI веке по летоисчислению, использовавшемуся древней цивилизацией — так называемому «григорианскому» календарю — год продолжительностью 365 дней, разделялся по нему на двенадцать месяцев. Второй месяц в году имел продолжительность двадцать восемь дней, первый, третий, пятый, седьмой, восьмой, десятый и двенадцатый — тридцать один день, остальные — тридцать дней. В особые года, номер которых делился на четыре и не делился на сто, либо делился на четыреста, второй месяц длился двадцать девять дней. Веком номер \(i\) назывался период с \(100 \cdot (i \ − \ 1) + 1\) года по \(100 \cdot i\).

Так как достоверно не известно, в каком порядке представители древней цивилизации записывали даты, вам, как главному специалисту по григорианскому календарю, поручили провести исследование — установить, каким датам в XXI веке могла соответствовать надпись, в предположении, что одно из чисел соответствует дню в месяце (дни в каждом месяце нумеровались с единицы), еще одно из чисел — номеру месяца (месяцы также нумеровались с единицы), и еще одно число — последним двум цифрам года в XXI веке григорианского календаря.

По заданной надписи на диске выясните, каким датам в XXI веке она могла соответствовать.

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

Во входном файле в формате aa/bb/cc записаны числа с диска.

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

В выходной файл в произвольном порядке выведите все корректные даты dd/mm/yy в XXI веке, где dd соответствует номеру дня, mm – номеру месяца, yy — номеру года, причем числа, соответствующие dd, mm и yy являются перестановками чисел с диска.

В случае, если никакая перестановка исходных чисел не является корректной датой XXI века, выведите «No such date».

Примеры
Входные данные
29/02/04
Выходные данные
29/02/04
02/04/29
29/04/02
04/02/29
Входные данные
01/01/01
Выходные данные
01/01/01
Входные данные
99/99/99
Выходные данные
No such date

Страница: << 25 26 27 28 29 30 31 >> Отображать по:
Выбрано
:
Отменить
|
Добавить в контест