Тур по геометрии и перебору [17.12.2006]

advertisement
Тренировки НГУ по программированию для школьников, 2006 г.
Тренировка 17.12.2006
Все приведенные ниже задачи, кроме первой, предлагались на РОИ либо на сборах в
различные годы.
Задача 1. Перестановки
Во входном файле задано число N (1 ≤ N ≤ 8). Требуется вывести все перестановки из N
элементов в лексикографическом порядке. Каждая перестановка должна быть записана на
отдельной строке.
Примеры
input.txt
2
output.txt
1
2
1
1
2
2
3
3
3
2
1
2
3
1
3
1
2
3
2
3
1
2
1
Задача 2. Пересечение окружностей
Вам даны две окружности на плоскости. Ваша цель – найти все их общие точки.
Формат входных данных
Первые две строки входного файла содержат описание окружностей. Каждое описание
состоит из трех целых чисел – координат центра и радиуса окружностей. Координаты не
превосходят 1000 по абсолютной величине. Радиус является положительным числом, не
превосходящим 1000.
Формат выходных данных
На первой строке выведите K – количество общих точек данных окружностей. Если
общих точек бесконечно много, выведите –1. Если общих точек конечное число,
следующие K строк должны содержать координаты этих точек. Выводите не менее 6
знаков после запятой.
Примеры
input.txt
0
4
0
0
0
0
0
0
2
2
1
1
output.txt
1
2.000000 0.000000
-1
Задача 3. Два отрезка
Два отрезка AB и CD на плоскости заданы координатами своих концов – точек A, B,
C и D.
Требуется найти пересечение этих отрезков и вывести:
 слово Empty, если эти отрезки не пересекаются;
 координаты точки пересечения, если пересечение состоит из единственной
точки;
Страница 1 из 4
Тренировки НГУ по программированию для школьников, 2006 г.
Тренировка 17.12.2006

координаты точек – концов отрезка пересечения, если пересечение заданных
отрезков является отрезком.
Формат входных данных
Входной файл содержит координаты точек A, B, C и D – целые числа, не
превосходящие 1000 по абсолютной величине. Отрезки могут быть вырождеными.
Формат выходных данных
Выходной файл должен содержать ответ на задачу в указанном формате. Числа
следует выводить не менее чем с 6 знаками после точки.
Пример
0 0
0 0
9 9
9 9
input.txt
9 5 0 5
15 15 7 7
0 0
9 9
10 10
output.txt
5.000000 5.000000
7.000000 7.000000 9.000000
9.000000
Empty
10 10
Задача 4. Две касательных
Вам даны две окружности на плоскости. Ваша цель – найти все их общие
касательные.
Формат входных данных
Первые две строки входного файла содержат описание окружностей. Каждое
описание состоит из трех целых чисел – координат центра и радиуса окружностей.
Координаты не превосходят 1000 по абсолютной величине. Радиус является
положительным числом, не превосходящим 1000.
Формат выходных данных
На первой строке выходного файла выведите K – количество общих касательных у
заданных окружностей. Если у окружностей бесконечно много общих касательных,
выедите –1. Если общих касательных конечное число, выведите на следующих K строках
коэфициенты A, B и C уравнения касательных, заданных в форме Ax + By + C = 0.
Примеры
input.txt
0 0 1
0 1 1
0 0 1
0 0 1
output.txt
2
1 0 -1.0
1 0 1
-1
Задача 5. Бридж
52 карты раздаются 4 игрокам, Северу, Югу, Западу и Востоку (у каждого по 13
карт). Известны карты двух игроков, сидящих один напротив другого (Севера и Юга).
Карты Востока и Запада закрыты (неизвестны). Необходимо вычислить количество
раскладов, удовлетворяющих некоторому условию.
Масть обозначается строчной латинской буквой: s – пика, h – черва, c – трефа, d –
бубна. Значение карты – прописной латинской буквой или цифрой: A – туз, K – король, Q
Страница 2 из 4
Тренировки НГУ по программированию для школьников, 2006 г.
Тренировка 17.12.2006
– дама, J – валет, T – десятка, 9…2 – карты от девятки до двойки. Карта записывается в
виде (Значение)(Масть), например, Qs – дама пик, 3d – тройка бубен. Игроки
обозначаются W (Запад) и E (Восток).
Используются следующие условия
 Карта:Игрок – заданная карта находится у заданного игрока, например As:W
— туз пик у Запада.
 Масть:Игрок=N – у заданного игрока ровно N (N – целое от 0 до 13) карт
заданной масти, например, s:W=4 – у Запада ровно четыре пики.
 & – связка «и», | – связка «или». Связки имеют одинаковый приоритет и
читаются слева направо. Для группировки операций могут использоваться
скобки. Пример: (s:W=4|s:W=3|s:W=2|s:W=1)&Ks:W – король пик не более, чем
четвёртый у Запада.
Формат входных данных
Первая строка входного файла – 13 карт Севера, следующая – 13 карт Юга, третья –
условие на заданном выше языке. Длина условия не превышает 80 символов.
Формат выходных данных
В выходной файл необходимо вывести количество раскладов, удовлетворяющих
условию заданому во входном файле.
Пример
input.txt
AsJsTs9s8s7s6s5s4s3s2sAh2d
9h8h7h6h5h4h3h2h6c5c4c3c2c
s:W=1|(Ks:E&Qs:E)|(Ks:W&Qs:W)
AsJsTs9s8s7s6s5s4s3s2sAh2d
9h8h7h6h5h4h3h2h6c5c4c3c2c
(Ks:W|Qs:W)&s:E=2
output.txt
10400600
0
Задача 6. Инволюции
Перестановку π назовем инволюцией, если π2 = ι, где ι — тождественная
перестановка. Упорядочим все перестановки из N элементов в лексикографическом
порядке. Напишите программу, которая по заданной перестановке найдет первую
инволюцию, следующую в этом упорядочении после данной перестановки.
Формат входных данных
Входной файл содержит сначала число N (2 ≤ N ≤ 100), а затем N различных целых
чисел из диапазона от 1 до N, задающих перестановку.
Формат выходных данных
Выходной файл должен полностью удовлетворять формату входного файла, однако
должен содержать искомую инволюцию. Если искомой инволюции не существует,
выведите в выходной файл одно число 0.
Примеры
input.txt
5
3 1 2 4 5
3
3 2 1
output.txt
5
3 2 1 4 5
0
Страница 3 из 4
Тренировки НГУ по программированию для школьников, 2006 г.
Тренировка 17.12.2006
Задача 7. Дирижабль
Ошметки от подбитого дирижабля разлетелись по всей равнине.
Военные специалисты огородили их единым забором
наименьшей длины (не самопересекающаяся замкнутая ломаная,
внутри которой расположены все точки). Требуется определить
площадь закрытой территории.
Формат входных данных
Во входном файле записано число точек N ( 0 < N < 106) далее
записаны координаты точек (действительные числа от 0 до 1).
Формат выходных данных
В выходной файл необходимо вывести площадь с 4 верными знаками.
Примеры
input.txt
5
0.5 0.5 0.8 0.4 0.1 0.1 0.3 0.9
1 1
output.txt
0.4500
Задача 8. Максимальное расстояние
На плоскости задано N точек. Найти расстояние между двумя наиболее удаленными друг
от друга точками.
Формат входных данных
Первая строка входного файла содержит число N (2 ≤ N ≤ 100000). Далее в файле записано
N пар целых чисел, задающих координаты точек. Все координаты по модулю не
превышают 104.
Формат выходных данных
В выходной файл выведите пару чисел — номера точек, для которых достигается
максимум расстояния. Точки нумеруются начиная с 1. Если решений несколько, то
следует вывести любое из них.
Примеры
input.txt
4
0
1
0
1
output.txt
4 3
1
0
0
1
Страница 4 из 4
Download