Задача A. Ближайшие точки

Автор:Методическая комиссия по информатике
Входной файл: input.txt   Ограничение времени:2 сек
Выходной файл: output.txt   Ограничение памяти:64 Мб
Максимальный балл:100  

Условие

Антон в школе начал изучать математику. Его внимание привлекло новое для него понятие числовой прямой. Антон быстро научился вычислять расстояния между двумя точками на этой прямой, задавать отрезки и интервалы на ней.

Готовясь к контрольной работе, Антон столкнулся со следующей задачей: "На числовой прямой задано n точек. Необходимо найти среди них две ближайшие". Расстояние между двумя точками числовой прямой x и y равно |x − y|.

Требуется написать программу, которая поможет Антону решить поставленную задачу.

Формат входного файла

Первая строка входного файла содержит количество точек n.

Вторая строка входного файла содержит n чисел xi - координаты заданных точек числовой прямой.

Формат выходного файла

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

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

Если ответов несколько, выведите любой из них.

Ограничения

2 ≤ n ≤ 105

xi - целые числа, не превосходящие 109 по абсолютной величине

Примеры тестов

Входной файл (input.txt) Выходной файл (output.txt)
1
5
10 3 6 2 5
1
2 4

Задача B. Вписанная окружность

Автор:Методическая комиссия по информатике
Входной файл: input.txt   Ограничение времени:2 сек
Выходной файл: output.txt   Ограничение памяти:64 Мб
Максимальный балл:100  

Условие

Очень интересными объектами, которые изучаются в планиметрии, являются вписанные и описанные окружности. Известно, например, что вокруг любого треугольника можно описать окружность и в любой треугольник можно вписать окружность. А что будет, если вместо треугольника задан выпуклый многоугольник?

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

Формат входного файла

Первая строка входного файла количество вершин многоугольника n.

Последующие n строк содержат координаты вершин многоугольника в порядке обхода против часовой стрелки, каждая i-ая из них содержит два целых числа: xi и yi.

Формат выходного файла

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

Ограничения

3 ≤ n ≤ 8

0 ≤ |xi|, |yi| ≤ 1000

Примеры тестов

Входной файл (input.txt) Выходной файл (output.txt)
1
4
0 0
1 0
1 1
0 1
YES
0.5 0.5 0.5
2
4
0 0
1 0
1 2
0 2
NO

Задача C. Разрезание прямоугольника

Автор:Методическая комиссия по информатике
Входной файл: input.txt   Ограничение времени:2 сек
Выходной файл: output.txt   Ограничение памяти:64 Мб
Максимальный балл:100  

Условие

На координатной плоскости задан прямоугольник, высота которого h, а ширина — w. Внутри прямоугольника задано n отрезков, параллельных осям координат.

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

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

Формат входного файла

Входной файл содержит целые числа h w k n. Далее следует n четвёрок целых чисел X1 Y1 X2 Y2 — координаты концов отрезков.

Формат выходного файла

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

Ограничения

1 ≤ h, w ≤ 8

1 ≤ k ≤ h × w

0 ≤ n ≤ 10

0 ≤ X1 ≤ X2 ≤ w, 0 ≤ Y1 ≤ Y2 ≤ h

Примеры тестов

Входной файл (input.txt) Выходной файл (output.txt)
1
2 2
4
0
4
2
8 8
20
0
767625216
3
4 4
2
2
2 0 2 3
2 3 4 3
3

Задача D. Рекурсия

Автор:Методическая комиссия по информатике
Входной файл: input.txt   Ограничение времени:2 сек
Выходной файл: output.txt   Ограничение памяти:256 Мб
Максимальный балл:100  

Условие

"Чтобы понять рекурсию, надо понять рекурсию"

Фольклор

Одним из важных понятий, используемых в теории алгоритмов, является рекурсия.

Неформально ее можно определить как использование в описании объекта самого себя. Если речь идет о процедуре, то в процессе исполнении эта процедура напрямую или косвенно (через другие процедуры) вызывает сама себя.

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

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

Рассмотрим программу, состоящую из n процедур P1, P2, ..., Pn. Пусть для каждой процедуры известны процедуры, которые она может вызывать. Процедура P называется потенциально рекурсивной, если существует такая последовательность процедур Q0, Q1, ..., Qk, что Q0 = Qk = P и для i = 1… k1 процедура Qi1 может вызвать процедуру Qi. В этом случае задача будет заключаться в определении для каждой из заданных процедур, является ли она потенциально рекурсивной.

Требуется написать программу, которая позволит решить названную задачу.

Формат входного файла

Первая строка входного файла содержит целое число n - количество процедур в программе.

Далее следуют n блоков, описывающих процедуры. Блоки отделены друг от друга и от первой строки входного файла строками, каждая из которых содержит по 5 символов "*" (ASCII 42).

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

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

Формат выходного файла

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

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

Ограничения

1 ≤ n ≤ 100

Идентификатор процедуры состоит только из маленьких букв латинского алфавита и цифр. Также идентификатор не пуст, и его длина не превосходит 100 символов.

k ≤ n

Примеры тестов

Входной файл (input.txt) Выходной файл (output.txt)
1
3
p1
2
p1
p2
*****
p2
1 
p1
*****
p3
1
p1
p1: YES
p2: YES
p3: NO

Задача E. Укладка плиток

Автор:Методическая комиссия по информатике
Входной файл: input.txt   Ограничение времени:2 сек
Выходной файл: output.txt   Ограничение памяти:64 Мб
Максимальный балл:100  

Условие

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

Для простоты будем считать, что пол помещения представляет собой прямоугольник размером n на m метров, разбитый на m*n квадратиков со стороной по 1 метру. Кроме этого, будем считать, что имеется четыре типа плиток, показанные в таблице. Каждая из плиток представляет собой квадрат размером 2 на 2 метра, из которого вырезан один квадратик размером 1 на 1 метр.

1
2
3
4

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

Требуется написать программу, которая определяет, какая площадь в соответствии с заданным набором команд будет покрыта плитками.

Формат входного файла

Первая строка входного файла содержит два числа m и n - размеры пола помещения.

Вторая строка содержит число k — количество команд, которые необходимо обработать. Каждая из последующих k строк содержит описание одной команды из набора команд. Описание команды состоит из трех чисел. Первое число определяет тип плитки (число от 1 до 4), а два других координаты левого верхнего квадрата размером 2 на 2, в который вписана соответствующая плитка.

Формат выходного файла

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

Ограничения

1 ≤ m, n ≤ 50

0 ≤ k ≤ 1000

Примеры тестов

Входной файл (input.txt) Выходной файл (output.txt)
1
4 4
4
4 1 1
2 2 2
3 1 1
1 3 3
9

0.066s 0.005s 23