ЗАДАЧИ
problems.ru
О проекте | Об авторах | Справочник
Каталог по темам | по источникам |
К задаче N

Проект МЦНМО
при участии
школы 57
Фильтр
Сложность с по   Класс с по  
Выбрана 1 задача
Версия для печати
Убрать все задачи

Современные системы управления базами данных поддерживают широкий класс различных операций с датами. Для решения этой задачи Вы должны написать программу, реализующую некоторые из таких операций. Ваша программа должна обрабатывать выражения следующих типов:
    <Дата>
    <Дата> + <Сдвиг>
    <Дата> - <Сдвиг>
    <Дата> - <Дата>

Здесь <Дата> задается в одном из следующих трех форматов:
А) дд.мм.гггг (например, 21.06.1998 ). В этой записи день и месяц задаются в точности двумя десятичными цифрами, год – ровно четырьмя.
Б) д месяца г года (например, 21 июня 1998 года ). В этом формате могут присутствовать ведущие нули (например, 01 июня 198 года ).
В) сегодня – текущая дата, установленная в компьютере.
<Сдвиг> задается в виде [L лет ] [M месяцев ] [N недель ] [D дней ]. Квадратные скобки здесь означают, что некоторые из указанных четырех составных частей могут опускаться (но не все сразу). Слова «лет», «месяцев», «недель», «дней» склоняются по правилам русского языка: 1 год, 5 лет, 2 месяца, 5 месяцев и т.д. 

Значением выражений первых трех типов является дата. В случае выражения первого типа значением является сама <Дата>. В случае выражений второго и третьего типа вычисление искомой даты происходит следующим образом: сначала прибавляется (либо вычитается) L лет, затем M месяцев, после чего N недель и, наконец, D дней. Если в течение этого процесса получается несуществующее число месяца, то берется последнее число этого месяца (см. пример). Результатом выражения четвертого типа является количество дней между двумя указанными датами. 

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

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

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

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

Пример входного файла

30 января 1998 года + 1 месяц 1 день
21 июня 1998 года - 1.06.1998

Пример выходного файла

1 марта 1998 года, воскресенье
20

   Решение

Задачи

Страница: << 6 7 8 9 10 11 12 >> [Всего задач: 67]      



Задача 102942

 [Кратчайший путь в квадрате]
Темы:   [ Прямая и отрезок ]
[ Кратчайшие пути в графах ]
Сложность: 3+

Внутрь квадрата с координатами левого нижнего угла (0, 0) и координатами правого верхнего угла (100, 100) поместили N квадратиков, стороны которых параллельны осям координат и имеют длину 5. Никакие два квадратика не имеют общих точек. Необходимо найти кратчайший путь из точки (0, 0) в точку (100, 100), который бы не пересекал ни одного из этих N квадратиков.

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

В первой строке входного файла содержится целое число N (1 ≤ N ≤ 30), в каждой следующих N строк – координаты левого нижнего угла (x, y) очередного из квадратиков (0 ≤ x, y ≤ 95).

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

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

Пример входного файла

5
5 5
5 15
15 10
15 20
90 90

Пример выходного файла

0 0
5 10
20 20
95 90
100 100
Прислать комментарий     Решение


Задача 102950

 [Булевы функции ]
Тема:   [ Задачи на полный перебор ]
Сложность: 3+

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

Любая булева функция однозначно задается своей таблицей истинности, в которой для каждого возможного набора значений аргументов указано значение функции. Например, x AND y – булева функция от двух аргументов. Ее таблица истинности выглядит так: 

Если договориться, что наборы значений аргументов в таблице располагаются в лексикографическом порядке, то функция AND однозначно задается третьим столбцом таблицы – строкой 0001. Аналогично, каждой булевой функции от k аргументов можно поставить в соответствие строку из нулей и единиц длины 2k.

Задан набор из N+1 булевой функции (f, f1, f2, ..., fN). Напишите программу, которая определяет, можно ли функцию f выразить через функции f1, f2, ..., fN, и если такие представления возможны, то находит кратчайшее по числу символов среди них.

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

В первой строке входного файла записано целое число N (1 ≤ N ≤ 9). Последующие N+1 строк содержат описания функций f, f1, f2, ..., fN соответственно. Каждая из функций описывается строкой символов так, как указано выше. Число аргументов у функции f будет не более двух, а у остальных функций – не более трех.

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

Первая строка выходного файла должна содержать искомое символьное представление, либо строку «Impossible», если такого представления не
существует. После функции с нулевым числом аргументов скобки не ставятся. Если у функции f один аргумент, то он обозначается x, а если два, то они обозначаются x и y.

Пример входного файла

2
1
1010
0

Пример выходного файла

f1(f2,f2)
Прислать комментарий     Решение


Задача 102951

 [Правдивое предложение ]
Тема:   [ Прочие задачи на сообразительность ]
Сложность: 3+

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

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


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

В выходной файл нужно выдать правдивое предложение. Предложение должно быть не длиннее 10 килобайт. Оно может содержать также иную (правдивую) информацию. Предложение должно быть как можно короче.
Прислать комментарий     Решение


Задача 102953

 [Сканер ]
Тема:   [ Неопределено ]
Сложность: 3+

Банки, пытаясь увеличить свою прибыль, попросили инженеров разработать сканер, который автоматически считывает номера чеков. Известно, что любой чек имеет девятизначный номер и для каждого номера чека выполняется следующее условие: (d1 +2d2 + ... +9d9) mod 11 = 0, где di равно i-й цифре номера (цифры нумеруются справа налево: d9d8d7d6d5d4d3d2d1).

Сканер, считывая номер, преобразовывает горизонтальные и вертикальные линии в символы | (ASCII-код 124) и _ (ASCII-код 95) соответственно. В результате сканирования выдается картинка, составленная из этих символов и пробелов. Пример правильного изображения цифр после сканирования приведен в примере входного файла.

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

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

Входной файл содержит отсканированную картинку в виде 3 строк по 27 символов в каждой. Изображение каждой цифры занимает квадрат размером 3 × 3 символа.

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

Запишите в выходной файл либо корректный номер чека, либо строку «failure», если номер восстановить нельзя, либо строку «ambiguous», если
существует более одного решения.

Пример входного файла

   _  _     _  _ _  _  _ 
|  _| _||_||_ |_  ||_||_| 
| |_  _|  | _||_| ||_| _| 

Пример выходного файла

123456789
Прислать комментарий     Решение

Задача 102954

 [Калькулятор дат ]
Тема:   [ Синтаксический разбор (прочее) ]
Сложность: 3+

Современные системы управления базами данных поддерживают широкий класс различных операций с датами. Для решения этой задачи Вы должны написать программу, реализующую некоторые из таких операций. Ваша программа должна обрабатывать выражения следующих типов:
    <Дата>
    <Дата> + <Сдвиг>
    <Дата> - <Сдвиг>
    <Дата> - <Дата>

Здесь <Дата> задается в одном из следующих трех форматов:
А) дд.мм.гггг (например, 21.06.1998 ). В этой записи день и месяц задаются в точности двумя десятичными цифрами, год – ровно четырьмя.
Б) д месяца г года (например, 21 июня 1998 года ). В этом формате могут присутствовать ведущие нули (например, 01 июня 198 года ).
В) сегодня – текущая дата, установленная в компьютере.
<Сдвиг> задается в виде [L лет ] [M месяцев ] [N недель ] [D дней ]. Квадратные скобки здесь означают, что некоторые из указанных четырех составных частей могут опускаться (но не все сразу). Слова «лет», «месяцев», «недель», «дней» склоняются по правилам русского языка: 1 год, 5 лет, 2 месяца, 5 месяцев и т.д. 

Значением выражений первых трех типов является дата. В случае выражения первого типа значением является сама <Дата>. В случае выражений второго и третьего типа вычисление искомой даты происходит следующим образом: сначала прибавляется (либо вычитается) L лет, затем M месяцев, после чего N недель и, наконец, D дней. Если в течение этого процесса получается несуществующее число месяца, то берется последнее число этого месяца (см. пример). Результатом выражения четвертого типа является количество дней между двумя указанными датами. 

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

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

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

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

Пример входного файла

30 января 1998 года + 1 месяц 1 день
21 июня 1998 года - 1.06.1998

Пример выходного файла

1 марта 1998 года, воскресенье
20
Прислать комментарий     Решение


Страница: << 6 7 8 9 10 11 12 >> [Всего задач: 67]      



© 2004-... МЦНМО (о копирайте)
Пишите нам

Проект осуществляется при поддержке Департамента образования г.Москвы и ФЦП "Кадры" .