II Открытая областная командная олимпиада студентов и школьников

advertisement
II Открытая областная командная олимпиада студентов и школьников
по программированию. 14 октября 2006 г. Оренбург
Задача A. Розетки и удлинители-2
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Ограничение времени на один тест: 1 секунда
Ограничение памяти на один тест: 64 Мбайт
В прошлом году на I областной командной олимпиаде по программированию
участники уже выясняли, какое максимальное количество электронных устройств
можно подключить к электрической сети, имея некоторое количество розеток и
удлинителей. Но не надо забывать, что не всегда удлинитель можно использовать,
поскольку его длина может быть слишком короткой.
Программист Сидоров хочет спроектировать установку розеток в своей
будущей квартире таким образом, чтобы в каждой комнате была только одна
розетка на стене на уровне пола, а все электронные устройства в комнате, где бы
они ни находились, подключались к этой розетке с помощью удлинителей. По
требованиям техники безопасности запрещено подключать один из удлинителей
через другой. Сидоров пока не может сказать, где будут располагаться электронные
устройства, поэтому решил закупить удлинители такой длины, чтобы они доставали
в любую точку комнаты. Осталось выбрать оптимальное расположение розеток, так
чтобы наибольшая длина удлинителя была как можно меньше.
Напишите программу, которая определяет наименьшую необходимую длину
самого длинного из удлинителей Сидорова при условии оптимального
расположения розеток.
Формат входных данных:
В первой строке входного файла записано количество комнат в квартире
Сидорова – целое число N (1 ≤ N ≤ 10000). Затем файл содержит N строк, в каждой
из которых через пробел записана пара целых чисел Li и Wi – длина и ширина i-ой
комнаты (1 ≤ Li , Wi ≤ 106).
Формат выходных данных:
Единственная строка выходного файла содержит действительное
длину удлинителя с точностью до 3 цифр после точки.
число –
Пример файла входных данных:
Соответствующий пример файла выходных
данных:
2
1 3
6 4
5.000
1
II Открытая областная командная олимпиада студентов и школьников
по программированию. 14 октября 2006 г. Оренбург
Задача B. Пылесос
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Ограничение времени на один тест: 1 секунда
Ограничение памяти на один тест: 64 Мбайт
В Японии уже несколько лет производятся домашние роботы. Электронные
собачки катаются по квартире, общаются с хозяевами, лают на посторонние звуки и
периодически сами подключаются к розетке для подзарядки. Более полезны для
дома автономные пылесосы, которые сами объезжают помещение в поисках мусора.
Но если хорошая хозяйка всегда может добраться в самый дальний уголок комнаты
для уборки, то пылесос не всегда это может сделать.
Предположим, что комната имеет форму правильного N-угольника, длина
каждой стены равна A. Пылесос в основании имеет форму круга радиуса R.
Пылесос убирает мусор с участка комнаты, который попадает под его основание.
Пылесос может свободно передвигаться по комнате в любом направлении.
Напишите программу, определяющую площадь части комнаты, которую не сможет
убрать пылесос. Если пылесос имеет такой большой радиус, что не помещается в
комнату, то искомая площадь равна площади всей комнаты.
Формат входных данных:
В единственной строке входного файла записаны целые числа N, A, R,
разделенные пробелами (3 ≤ N ≤ 100; 1 ≤ A,R ≤ 106).
Формат выходных данных:
Единственная строка выходного файла содержит действительное число –
площадь неубранной части комнаты с точностью до 3 цифр после точки.
Пример файла входных данных:
4 5 1
Соответствующий пример файла выходных
данных:
0.858
2
II Открытая областная командная олимпиада студентов и школьников
по программированию. 14 октября 2006 г. Оренбург
Задача С. Огороды
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Ограничение времени на один тест: 1 секунда
Ограничение памяти на один тест: 64 Мбайт
Участок садоводческого товарищества решили разбить на огороды между
садоводами. Каждому из R садоводов разрешили соединить прямолинейной
изгородью две любые точки участка. При этом две изгороди могут иметь только
одну общую точку, которая является концом и одной, и другой. В результате
получилось V различных конечных точек изгородей и некоторое количество G
ограниченных участков.
Напишите программу, определяющую количество отгороженных участков.
Если ни одного полностью отгороженного участка не получилось, программа
должна возвращать ноль.
Формат входных данных:
В первой строке входного файла записаны два целых числа V (1 ≤ V ≤ 1000) –
количество конечных точек и R (1 ≤ R ≤ 10000)– количество изгородей. Далее в
файле идут V строк, в каждой по два целых числа Xi и Yi – координаты i-ой конечной
точки (–10000 ≤ Xi , Yi ≤ 10000). Далее в файле идут R cтрок, в каждой по два целых
числа: номера конечных точек, соединенных изгородью.
Формат выходных данных:
В выходном файле должно быть записано единственное целое число –
количество отгороженных участков.
Пример файла входных данных:
Соответствующий пример файла выходных
данных:
5
0
0
1
1
0
1
1
4
1
4
2
3
0
0
1
1
1
2
6
0
-1
0
1
2
2
4
5
3
3
3
2
0
1
0
2
3
0
3
II Открытая областная командная олимпиада студентов и школьников
по программированию. 14 октября 2006 г. Оренбург
Задача D. Ладьи
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Ограничение времени на один тест: 1 секунда
Ограничение памяти на один тест: 64 Мбайт
Игра в шахматы – неиссякаемый источник различных головоломок и
программистских задач. Неудивительно, что хорошие программы играют лучше,
чем гроссмейстеры, что компьютерный эксперимент привел к необходимости
изменения в шахматных правилах. В докомпьютерную эру позиция, из которой в
течение 50 ходов не произведено ни одного взятия, считалась ничейной. Оказалось,
что кратчайший путь к выигрышу из некоторых окончаний содержит сотни ходов.
Рассмотрим еще одну несложную задачу. Пусть на доске MxN расположено K
ладей. Напишите программу, определяющую количество клеток, которые не бьются
ни одной ладьей. При этом ладья не бьет клетку, на которой стоит, но бьет все
остальные клетки по горизонтали и вертикали. Будем считать, что клетки
нумеруются от 1 до M по вертикали и от 1 до N по горизонтали. Координаты ладьи
задаются номером строки и номером столбца.
Формат входных данных:
В первой строке входного файла записаны целые числа M, N, K, разделенные
пробелами (1 ≤ M, N ≤ 10000; 0 ≤ K ≤ 10000). В K следующих строках перечислены
координаты ладей Yi, Xi (1 ≤ Yi ≤ M, 1 ≤ Xi ≤ N).
Формат выходных данных:
Единственная строка выходного файла содержит целое число – количество
клеток, которые не бьются ни одной ладьей.
Пример файла входных данных:
3 3 2
1 1
3 3
Соответствующий пример файла выходных
данных:
3
4
II Открытая областная командная олимпиада студентов и школьников
по программированию. 14 октября 2006 г. Оренбург
Задача E. Остановки
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Ограничение времени на один тест: 1 секунда
Ограничение памяти на один тест: 64 Мбайт
Работа городского транспорта очень часто заставляет нас задуматься. Часто
приходится решать вопрос – на какую остановку лучше всего пойти. Известно, что
из точки, которая находится в середине пути между двумя последовательными
остановками лучше идти на следующую остановку по ходу движения, поскольку
если пойти к предыдущей, то можно чуть-чуть опоздать, а, выйдя в тот же момент к
следующей, – успеть. Назовем остановку неоптимальной, если возможна следующая
ситуация: пешеход вышел из дома и дошел до этой остановки, при этом автобус уже
только что ушел, но если бы пешеход в тот же исходный момент времени вышел из
дома и пошел к другой остановке, то успел бы на этот автобус. Остановка
называется оптимальной, если описанная ситуация невозможна.
Пусть задан маршрут автобуса в виде последовательных координат остановок
на плоскости. Также известна скорость автобуса, время стоянки на остановке,
скорость пешехода, координаты дома, где живет пешеход. Пешеход идет от дома до
остановки всегда по кратчайшему пути. Напишите программу, определяющую
номер оптимальной остановки. Если оптимальных остановок несколько, выдайте
любое решение.
Формат входных данных:
В первой строке входного файла записаны целые числа, разделенные
пробелами – число остановок N, скорость автобуса V, время стоянки автобуса T,
скорость пешехода W, координаты дома X,Y (1 ≤ N ≤ 1000, 1 ≤ V, T ,W ≤ 1000,
–10000 ≤ X, Y ≤ 10000). Далее – N строк, в каждой из которых через пробел записана
пара целых чисел Xi и Yi – координаты i-ой остановки (–10000 ≤ Xi , Yi ≤ 10000).
Формат выходных данных:
В выходном файле должно быть единственное целое число – номер
оптимальной остановки.
Примеры файлов входных данных:
Соответствующие примеры файлов
выходных данных:
2
0
0
2
0
0
2
10 1 2 0 40
0
100
10 1 2 0 35
0
100
1
5
II Открытая областная командная олимпиада студентов и школьников
по программированию. 14 октября 2006 г. Оренбург
Задача F. Спираль
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Ограничение времени на один тест: 1 секунда
Ограничение памяти на один тест: 64 Мбайт
Спираль – одна из самых замечательных кривых, тысячелетия занимала умы
математиков. Спираль часто встречается в живой природе: раковина улитки, ряды
семян подсолнуха, елочная шишка – это примеры спиралей.
Конечно, спираль можно построить и с помощью программирования. Пусть
задана таблица MxN. Напишите программу, расставляющую в этой таблице числа
от 1 до MN, так чтобы получалась спираль с началом в верхнем левом углу,
закрученная по часовой стрелке.
Формат входных данных:
В единственной строке входного файла записаны целые числа M, N
разделенные пробелами (1 ≤ M, N ≤ 100).
Формат выходных данных:
Выходной файл содержит M строк, в каждой
пробелами.
Пример файла входных данных:
3 3
– N чисел, разделенных
Соответствующий пример файла выходных
данных:
1 2 3
8 9 4
7 6 5
6
II Открытая областная командная олимпиада студентов и школьников
по программированию. 14 октября 2006 г. Оренбург
Задача G. Эрудит
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Ограничение времени на один тест: 1 секунда
Ограничение памяти на один тест: 64 Мбайт
В игре «Эрудит» нужно составлять слова из фишек с буквами. Каждая буква
имеет свою стоимость – от 1 до 9 очков. У игрока на руках имеется некоторое
количество фишек, причем буквы могут повторяться.
Напишите программу, определяющую количество различных слов с заданной
суммой очков, составленных из заданного набора фишек. При составлении слова
могут использоваться не все фишки. Слова, отличающиеся порядком букв, нужно
считать различными.
Пример: у игрока имеются фишки в соответствии с рисунком
А1
А1
E1
C3
Y5
Существует четыре различных слова с суммой очков, равной 3:
C, AAЕ, АЕА, ЕАА.
Формат входных данных:
В первой строке входного файла записана заданная сумма очков N (1 ≤ N ≤
100), далее – количество фишек K (1 ≤ K ≤ 20), далее – количество букв M (1 ≤ M ≤
10) . Во второй строке перечислено М пар буква – цифра, разделенных пробелом.
Все буквы – различные латинские прописные. В третьей строке записана строка из К
букв – множество фишек у игрока на руках. Гарантируется, что все буквы из третьей
строки встречаются во второй ровно один раз.
Формат выходных данных:
В выходном файле должно быть записано единственное число – количество
различных слов с заданной суммой очков.
Примеры
данных:
3 5 4
A1 E1 C3 Y5
AAYCE
1 1 1
A2
A
файлов
входных Соответствующие
выходных данных:
4
0
7
примеры
файлов
II Открытая областная командная олимпиада студентов и школьников
по программированию. 14 октября 2006 г. Оренбург
Задача H. Чаепитие
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Ограничение времени на один тест: 1 секунда
Ограничение памяти на один тест: 64 Мбайт
Вася Пупкин решил устроить чаепитие в честь своего дня рождения. На
чаепитие придут N гостей, каждый любит чай одного из К сортов, которые
пронумерованы, начиная от 1 до К. На кухне у Васи стоят M чайников,
пронумерованных от 1 до М, в каждом из которых можно заварить чай на некоторое
целое число чашек. Для каждого сорта чая также известно, сколько раз можно
доливать кипяток, чтобы чай не потерял аромат. Вася хочет заварить в каждом
чайнике один из сортов чая, причем разные чайники должны содержать разные
сорта, чай заваривается в чайнике только один раз, затем просто доливается
кипяток.
Напишите программу, которая определяет для каждого чайника, какой сорт
чая должен в нем завариваться, чтобы напоить ароматным чаем всех гостей.
Формат входных данных:
В первой строке входного файла записано количество сортов чая K, а затем K
целых чисел Xi – количество раз, сколько можно доливать кипяток для каждого
сорта (1 ≤ K ≤ 1000, 0 ≤ Xi ≤ 10). Во второй строке входного файла записано
количество гостей N, а затем N чисел Сi – номера сортов чая, которые любит каждый
гость (1 ≤ N ≤ 100000, 1 ≤ Ci ≤ K). В третьей строке входного файла записано
количество чайников M, а затем M целых чисел Vi – объем каждого чайника в
чашках (1 ≤ M ≤ 1000, 1 ≤ Vi ≤ 100).
Формат выходных данных:
Единственная строка выходного файла должна содержать M целых чисел –
номера сортов чая, которые нужно заваривать в каждом чайнике. Если напоить
гостей чаем не удастся, строка должна содержать единственное число –1. Если
решений несколько, программа должна найти любое. Если в чайнике не нужно
заваривать чай, то номер сорта для него должен равняться нулю.
Примеры
данных:
файлов
входных Соответствующие
выходных данных:
3 0 1 2
9 1 2 3 2 3 1 2 3 2
3 3 1 2
3 1 2 0
10 1 2 2 1 2 2 1 2 2 1
3 3 1 2
3 0 1 2
10 1 2 2 1 2 2 1 2 2 1
3 3 1 2
2 3 1
2 0 1
-1
8
примеры
файлов
II Открытая областная командная олимпиада студентов и школьников
по программированию. 14 октября 2006 г. Оренбург
Задача I. Непрерывная дробь
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Ограничение времени на один тест: 1 секунда
Ограничение памяти на один тест: 64 Мбайт
Непрерывной (или цепной) дробью называется выражение вида
a1 
1
a2 
1
a3 
1
...
a n 1 
1
an
где a1, a2, …, an – целые числа. В теории чисел доказывается, что любое
рациональное число может быть представлено в виде конечной непрерывной дроби.
Напишите программу, которая для заданного рационального числа находит
коэффициенты разложения в непрерывную дробь.
Формат входных данных:
В единственной строке входного файла записано два целых числа P и Q –
числитель и знаменатель дроби (-109 ≤ P ≤ 109; 1 ≤ Q ≤ 109).
Формат выходных данных:
Первая строка выходного файла содержит количество коэффициентов N. Во
второй строке должны быть перечислены коэффициенты разложения в
непрерывную дробь, разделенные пробелами. Если разложение неоднозначно,
можно выдать любое.
Пример файла входных данных:
Соответствующий пример файла выходных
данных:
234 197
4
1 5 3 12
9
II Открытая областная командная олимпиада студентов и школьников
по программированию. 14 октября 2006 г. Оренбург
Задача J. Оборона королевства
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Ограничение времени на один тест: 1 секунда
Ограничение памяти на один тест: 64 Мбайт
Королевство состоит из двух городов и N < 150 деревень, которые связаны
непересекающимися дорогами друг с другом. Дороги двунаправленные и в обоих
направлениях время прохода по дороге одинаково. Король имеет G < 105 солдат.
Чтобы предотвратить контрабандную торговлю между городами, король хочет
расставить своих солдат на некоторых дорогах так, чтобы было невозможно попасть
из одного города в другой мимо поста. Пост не может располагаться в деревне или в
городе, но может располагаться на любой дороге. На одной дороге может
располагаться любое количество солдат.
Тем временем, любой из двух городов может быть атакован иностранной
армией. Король должен иметь возможность быстро собрать всех своих солдат в
атакованный город. Король хочет расставить солдат таким образом, чтобы время
мобилизации было минимальным.
Будем считать, что все деревни пронумерованы от 0 до N-1, города имеют
номера N и N+1. Между любой парой населенных пунктов всегда существует как
минимум один путь.
Формат входных данных:
В первой строке входного файла записаны количество деревень N, количество
солдат G и количество дорог E (0 ≤ N ≤ 150; 1 ≤ G ≤ 105; 1≤ E ≤ 5000).
Далее в файле идут E строк, в каждой по три целых числа: номера населенных
пунктов, соединенных двухсторонней дорогой,
и время, требуемое для ее
прохождения Ai (1≤ Ai≤ 1000).
Формат выходных данных:
В выходном файле должно быть записано единственное целое число –
наилучшее время мобилизации с одним знаком после точки. Если заданное число
солдат недостаточно для предотвращения контрабанды, выходной файл должен
содержать число –1.
Пример файла входных данных:
Соответствующий пример файла выходных
данных:
4
4
0
1
4
2
3
2.5
2
0
1
5
2
3
5
6
1
2
1
1
3
1
10
Download