5. Игральные кубики
Ограничения: время – 2s/4s, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
Юный математик Матвей интересуется теорией вероятностей, и по этой причине у него
всегда есть с собой несколько стандартных шестигранных игральных кубиков. Стандартный шестигранный
кубик имеет три противолежащих пары граней, которые размечены таким образом, что напротив грани с числом 1
находится грань с числом 6, напротив грани с числом 2 — грань с числом 5 и напротив грани с
числом 3 — грань с числом 4.
Анализируя различные игры с шестигранными кубиками, Матвей придумал новую игру. В эту игру играют
два игрока, и проходит она следующим образом: первый игрок бросает один или
несколько стандартных кубиков (количество кубиков он определяет сам). После этого первому игроку
начисляется количество очков, равное сумме чисел, оказавшихся на верхних гранях всех кубиков, а второму
игроку — сумма чисел, оказавшихся на нижних гранях этих кубиков. Побеждает тот, кто набрал больше очков.
Например, если был брошен один кубик, и на верхней его грани выпало число два, то первый игрок
получает два очка, а второй — пять. В свою очередь, если было брошено два кубика и на их верхних
гранях выпало по единице, то первый игрок получает также два очка, а второй игрок – двенадцать очков, так
как на нижних гранях этих кубиков оказались шестерки.
Матвей рассказал об этой игре своему другу, юному информатику Фоме, и они начали играть в неё через
Интернет. Поскольку Фома не видит результат броска и не знает, сколько кубиков бросает
Матвей как первый игрок, то о набранных каждым игроком очках он узнает только от Матвея. Чтобы
проверить достоверность этой информации, Фома решил узнать, какое минимальное и максимальное количество
очков мог получить он, как второй игрок, если известно, сколько очков набрал Матвей.
Требуется написать программу, которая по количеству очков, набранных первым игроком после броска, определяет
наименьшее и наибольшее количество очков, которые может получить второй игрок за этот бросок.
Формат входного файла
Первая строка входного файла содержит одно целое положительное число `n` — количество очков, которые получил
первый игрок (`1\ ≤\ n\ ≤\ 10^10`).
Формат выходного файла
Выходной файл должен содержать два разделенных пробелом целых числа: минимальное и максимальное количество
очков соответственно, которые мог набрать второй игрок при таком броске кубиков.
Система оценивания
Правильные решения для тестов, в которых `1\ ≤\ n\ ≤\ 1000`, будут оцениваться из 50 баллов.
Источник: региональный этап Всероссийской олимпиады по информатике 2012/2013, http://neerc.ifmo.ru/school/
6. Имена
Ограничения: время – 2s/4s, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
На далекой планете Тау Кита есть непонятные нам обычаи. Например, таукитяне очень необычно для землян
выбирают имена своим детям. Родители так выбирают имя ребенку, чтобы оно могло быть получено как удалением
некоторого набора букв из имени отца, так и удалением некоторого набора букв из имени матери. Например, если
отца зовут "abacaba", а мать — "bbccaa", то их ребенок может носить имена "a", "bba", "bcaa", но не может носить
имена "aaa", "ab" или "bbc". Возможно, что имя ребенка совпадает с именем отца и/или матери, если оно может быть
получено из имени другого родителя удалением нескольких (возможно, ни одной) букв.
Пусть отец по имени `X` и мать по имени `Y` выбирают имя своему новорожденному ребенку. Так как в таукитянских
школах учеников часто вызывают к доске в лексикографическом порядке имен учеников, то есть в порядке
следования имен в словаре, то они хотят выбрать своему ребенку такое имя, чтобы оно лексикографически
следовало как можно позже.
Формально, строка `S` лексикографически больше строки `T`, если выполняется одно из двух условий:
- строка `T` получается из `S` удалением одной или более букв с конца строки `S`;
- первые `(i-1)` символов строк `T` и `S` не различаются, а буква в `i`-й позиции строки `T` следует в алфавите раньше буквы в `i`-й позиции строки `S`.
Требуется написать программу, которая по именам отца и матери находит лексикографически наибольшее имя для их ребенка.
Формат входного файла
Первая строка входного файла содержит имя отца `X`. Вторая строка входного файла содержит имя матери `Y`. Каждое имя
состоит из строчных букв латинского алфавита, включает хотя бы одну букву и имеет длину не более `10^5` букв.
Формат выходного файла
Выходной файл должен содержать искомое лексикографически наибольшее из возможных имен ребенка. В случае, если
подходящего имени для ребенка не существует, выходной файл должен быть пустым (или его единственная строка должна быть пустой).
Пример ввода 1
abcabca
abcda
Пример ввода 2
ccba
accbbaa
Пояснения к примеру
В первом примере имя ребенка не может начинаться с буквы большей с, так как имя отца не содержит таких
букв. Буква с содержится в обоих именах, следовательно, имя ребенка может начинаться с этой буквы.
Единственная буква, которая может идти следом за буквой с в имени ребенка — это буква a.
Система оценивания
Правильные решения для тестов, в которых имена содержат только буквы a и b и имеют длину не
более 1000, будут оцениваться из 20 баллов.
Правильные решения для тестов, в которых имена содержат только буквы a и b и имеют длину не
более `10^5`, будут оцениваться из 40 баллов.
Правильные решения для тестов, в которых имена имеют длину не более 1000, будут оцениваться из 40 баллов.
Несмотря на выделение отдельных групп тестов, на окончательную проверку будут приниматься только решения, правильно работающие для всех тестов, приведенных в условии задачи.
Источник: региональный этап Всероссийской олимпиады по информатике 2012/2013, http://neerc.ifmo.ru/school/