Задания для районного (городского) тура олимпиады по информатике Задача 1. Троллейбус Входной файл: input.txt Выходной файл: output.txt Ограничение по времени: 2 сек. на тест Максимальное количество баллов: 50 баллов Троллейбусная сеть города состоит из N троллейбусных остановок, пронумерованных числами от 1 до N. Остановки соединяются друг с другом M перегонами, пронумерованными от 1 до M. На троллейбусных остановках есть стрелки, позволяющие троллейбусам переходить с любого ведущего к остановке перегона на любой другой перегон, ведущий от нее. Все перегоны равной длины, но двух типов: односторонние и двухсторонние. По односторонним перегонам троллейбусы могут двигаться только в одном направлении, по двусторонним – в обоих, причем в два раза медленнее, чем по односторонним. Требуется: по заданной схеме троллейбусной сети города найти кратчайший по времени путь между двумя заданными остановками, при условии, что троллейбусы никогда не мешают друг другу (в городе один троллейбус). Входные данные гарантируют, что путь между остановками всегда существует. Входные данные: Ввод данных производится из файла input.txt. Первая строка входного файла содержит количество остановочных пунктов N (2≤ N≤ 100) и число перегонов M (1 ≤ M ≤ 30000). Оставшаяся часть файла содержит M строк с описаниями перегонов по одному описанию в строке. Каждое описание состоит из четырех чисел, разделенных пробелом: номера перегона; двух номеров остановок, которые соединяет данный перегон; тип перегона (1, если перегон односторонний и 2, если двусторонний). Если перегон односторонний, то движение троллейбусов по нему разрешается от первого остановочного пункта в описании ко второму. Последняя строка файла содержит два номера остановок, между которыми следует найти кратчайший по времени путь (от первой остановки ко второй). Выходные данные: Вывод результата работы программы производится в файл output.txt. В файл необходимо вывести список номеров остановочных пунктов и номеров перегонов в порядке их прохождения троллейбусом по маршруту, по одному в строке. В случае нескольких возможных правильных ответов вывести любой из них. Примеры Ввод 4 6 1 2 1 1 2 2 1 2 3 1 3 1 5 2 4 2 4 2 3 2 Вывод 1 2 2 5 4 1 6 4 3 1 1 4 Задача 2. «Лунные города» Входной файл: input.txt Выходной файл: output.txt Ограничение по времени: 5 сек. на тест Максимальное количество баллов: 50 баллов В середине 21 века Россия построила на спутнике Земли – Луне несколько городов. Для перемещения между городами была создана транспортная сеть, состоящая из прорытых в лунном грунте туннелей. Все туннели имеют двустороннее движение, то есть их можно использовать для перемещения между городами в обоих направлениях. К сожалению, перемещение по туннелям платное – каждый проход через туннель стоит 10 рублей. Перемещаться по поверхности Луны из одного города в другой, не используя туннели невозможно. Требуется: Создайть программу для определения, какой минимальной суммой рублей должен располагать житель лунного города, чтобы добраться из одного города в другой. Входные данные Ввод данных производится из файла input.txt. Первая строка входного файла содержит два числа - начальные координаты расположения жителя лунного города, вторая строка содержит два числа - координаты города, куда ему надо попасть. Третья строка содержит число N - количество туннелей на Луне (0<=N<=500). Оставшаяся часть файла содержит N описаний туннелей, по одному описанию в строке. Каждый туннель описывается четверкой чисел: первые два задают координаты одного из соединяемых туннелем городов, последние два - координаты другого города. Все координаты - целые числа, не превышающие по модулю 1000000. Каждое описание состоит из четырех чисел, разделенных пробелом. Выходные данные Вывод результата работы программы производится в файл output.txt. В файл необходимо вывести одно число - минимальную сумму рублей, которой должен располагать житель лунного города для достижения цели. Если он не сможет добраться до конечного города, то в выходной файл записывается число -1. Примеры: INPUT.TXT INPUT.TXT 10 10 10 10 -10 -10 -10 -10 1 2 2233 -10 -10 1 1 OUTPUT.TXT 10 10 1 1 -1 OUTPUT.TXT 20 INPUT.TXT 10 10 10 10 4 1122 10 10 20 20 2211 10 10 20 20 OUTPUT.TXT 2 0 Задача 3. Дороги Входной файл: INPUT.TXT Выходной файл: OUTPUT.TXT Ограничение по времени: 2 сек. на тест Максимальное количество баллов: 50 баллов В некоторой стране дороги построены таким образом, что каждая дорога соединяет только два города, дороги не пересекают друг друга и не имеют ответвлений. Таким образом, страна разделена на отдельные области. Чтобы добраться из одной области в другую необходимо либо пройти через город, либо пересечь дорогу. Два любых города A и B могут соединяться не более чем одной дорогой (один конец дороги в городе A, а другой - в городе B). Более того, всегда существует путь из города A в город B, проходящий вдоль каких-либо дорог и через города. Существует клуб любителей природы, члены которого живут в разных городах. В каждом городе может жить либо один член клуба, либо вообще ни одного. Иногда у членов клуба возникает желание встретиться внутри одной из областей на природе, но не в городе. Чтобы попасть в нужную область, каждый член клуба должен пересечь какое-то количество дорог, возможно, равное нулю. Члены клуба путешествуют на велосипедах. Они не хотят въезжать ни в один город из-за интенсивного движения на городских улицах. Они также хотят пересечь минимально возможное количество дорог, так же из-за интенсивного движения. Исходя из этого, нужно найти такую оптимальную область, чтобы суммарное количество дорог, которые требуется пересечь членам клуба, называемая суммой пересечений, было минимальным из всех возможных. Рисунок 1. Рисунок 2. Города пронумерованы целыми числами от 1 до N, где N - количество городов. На рис. 1 пронумерованные вершины обозначают города, а линии, соединяющие вершины, обозначают дороги. Предположим, что членами клуба являются три человека, которые живут в городах с номерами 3, 6 и 9. Тогда оптимальная область и соответствующие маршруты движения членов клуба показаны на рис. 2. Сумма пересечений равняется 2, так как членам клуба следует пересечь две дороги: человеку из города 9 требуется пересечь дорогу между городами 2 и 4, человеку из города 6 требуется пересечь дорогу между городами 4 и 7, а человек из города 3 не пересекает дорог вообще. Требуется: написать программу, которая по заданной информации о городах, областях и местах проживания членов клуба находит оптимальную область и минимальную сумму пересечений. Входные данные Ввод данных производится из файла input.txt. Первая строка входного файла содержит одно целое число: количество областей M, 2≤M≤200. Вторая строка содержит одно целое 3 число: количество городов N, 3≤N≤250. Третья строка содержит одно целое число: количество членов клуба L, 1≤L≤30, L≤N. Четвертая строка содержит L различных целых чисел в возрастающем порядке: номера городов, где живут члены клуба. Оставшаяся часть файла содержит 2M строк, по паре строк для каждой из M областей. Первые две строки из них описывают первую область, вторые две строки - вторую область, и т. д. В каждой паре первая строка содержит количество городов I на границе области; вторая строка содержит номера этих I городов в порядке обхода границы области по часовой стрелке. Единственным исключением является последняя область – это находящаяся снаружи (внешняя) область, окружающая все города и другие области, и для нее порядок следования городов на границе задается против часовой стрелки. Порядок описания областей во входном файле задает целые номера этим областям. Область, описанная первой во входном файле, имеет номер 1, описанная второй – номер 2, и т. д. Обратите внимание, что входной файл содержит описание всех областей, образованных городами и дорогами, включая находящуюся снаружи (внешнюю) область. Выходные данные Вывод результата работы программы производится в файл output.txt. Первая строка этого файла содержит одно целое число: минимальную сумму пересечений. Вторая строка содержит одно целое число: номер оптимальной области. Если существует несколько различных решений, вам необходимо выдать лишь одно из них. Приведенные входной и выходной файлы соответствуют рассмотренному в тексте примеру Примеры Ввод Вывод 10 2 10 3 3 3 6 9 3 1 2 3 3 1 3 7 4 2 4 7 3 3 4 6 7 3 4 8 6 3 6 8 7 3 4 5 8 4 7 8 10 9 3 5 10 8 7 7 9 10 5 4 2 1 4 Задача 4. Светомузыкальный фонтан Входной файл: input.txt Выходной файл: output.txt Ограничение по времени: 20 сек. Максимальное количество баллов: 50 баллов В городе Липецке недавно открыли новый светомузыкальный фонтан. При его проектировании необходимо было проложить кабель электропитания по следующему техническому заданию: 1. Плоское дно фонтана описывается замкнутой ломаной линией без самопересечений; 2. Никакие три вершины ломаной не лежат на одной прямой; 3. Для организации светомузыкальной подсветки фонтана между двумя заданными углами (вершинами) по дну необходимо проложить гибкий натянутый кабель (см. рис.). Требуется: написать программу, вычисляющую длину этого кабеля. Входные данные Ввод данных производится из файла input.txt. Первая строка входного файла содержит одно число – число вершин N (N≤100). Оставшаяся часть файла содержит N строк с описанием координат вершин x1 y1 x2 y2 ... xN yN в порядке обхода ломаной против часовой стрелки, где 1,2,...,N - номера вершин. Каждое описание состоит из двух чисел разделенных пробелом. Последняя строка содержит два числа разделенных пробелом — номера соединяемых вершин k и l (1≤k≤l≤N). Координаты вершин являются вещественными числами. Все входные данные корректны. Выходные данные Вывод результата работы программы производится в файл output.txt. В файл необходимо вывести одно число – длину кабеля соединяющего две вершины. Результат проверяется с точностью до шести значащих цифр. Результирующее число может быть как с фиксированной точкой, так и в нормализованном виде. Примеры Ввод Вывод 7 7.5 2 0 5 0 6 3.5 5 6 4 2 3 7 0 5 3 7 5 Задача 5. Разорительный интернет Входные данные: input.txt Выходные данные: ouput.txt Время на тест: 10 секунд Максимальное количество баллов: 50 баллов Оплата за онлайновый режим работы в интернете зависит от времени суток и дня недели. Описание тарифного плана состоит из нескольких строк (записей). Каждая строка плана описывает с точностью до минуты непрерывный интервал времени, оплата в течение которого остается неизменной. Все строки, описывающие тарифный план, относятся к одной неделе. На основании записей в журнале подключений к интернету требуется определить, сколько Вы должны заплатить за онлайновый режим работы в сети интернет. Входные данные: Ввод данных производится из файла input.txt. Первая строка входного файла содержит два числа разделенных пробелом – N (1 ≤ N ≤ 100), количество строк тарифного плана и M (1 ≤ M ≤ 100000), число записей журнала. Оставшаяся часть файла содержит N строк с описанием тарифного плана. Описание тарифного плана содержит: * номер дня недели (число от 1 до 7, 1 - понедельник); * время в формате ЧЧ:ММ (незначащие нули указываются) – начало промежутка времени, соответствующего этой записи; * стоимость одной минуты онлайнового доступа к интернету в течение этого промежутка (целое положительное (натуральное) число, не превосходящее 10000). Окончание промежутка, соответствующего записи тарифного плана, определяется началом следующего (по времени) промежутка, а окончание действия последнего промежутка недели – началом действия первого. Например, если тарифный план содержит две записи, и их описания выглядят так: 1 09:00 500 5 22:00 200 то в период с 09:00 понедельника по 21:59 пятницы включительно вы платите по 500 рублей за минуту, а в оставшееся время – по 200 рублей. Последняя часть файла содержит M строк с описанием каждого подключения. Описание одной записи журнала подключений к интернету содержит: * номер дня недели; * время в формате ЧЧ:ММ, в которые началось подключение; * длительность подключения в минутах Различные записи в журнале подключений соответствуют различным, не пересекающимся во времени подключениям (возможно, относящимся к разным неделям). Длительность подключения задается натуральным числом. Каждая минута нахождения в сети оплачивается согласно тому промежутку тарифного плана, в котором она начинается. Максимальная длительность одного подключения – 100000 минут. Все данные в описаниях разделяются пробелом. Выходные данные Вывод результата работы программы производится в файл output.txt. В файл необходимо вывести одно число – величину оплаты за онлайновый режим работы в интернете. Примеры Ввод 2 1 5 2 5 2 3 09:00 22:00 22:42 21:06 22:50 Вывод 36100 500 200 16 57 1 6