Загрузка [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js

printРабочее место участника

printЗадачи

1693. Светофор

Ограничения: время – 2s/3s, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0) idea

Всем известно, что в городах есть большая проблема — пробки. Пробка образуется, когда по дороге пытаются ехать сразу много машин. При этом основная причина образования пробок — перекрестки. Самые большие пробки образуются именно на них.
В одном городе на перекрестке, на котором пересекаются две односторонние дороги, решили установить светофор.
В каждый момент светофор либо горит зеленым для машин на первой дороге, либо горит зеленым для машин на второй дороге, либо переключается между этими режимами. По правилам дорожного движения, в моменты переключения светофора можно ехать по любой дороге.
Светофор устроен следующим образом. В момент времени 0 он загорается зеленым для машин на первой дороге и красным для машин на второй дороге. Далее, через g секунд он переключается на красный для машин на первой дороге и зеленый для машин на второй дороге, после чего через r секунд переключается обратно на зеленый для первой дороги, и т. д.
Таким образом, светофор горит зеленым для первой дороги в моменты времени (  для целых k и зеленым для второй дороги — в (\ k(r\ +\ g)\ +\ g,\ (k\ +\ 1)(r\ +\ g)\ ). Переключения же происходят в моменты k(r\ +\ g) и k(r\ +\ g)\ +\ g. Когда светофор горит зеленым для первой дороги, по ней могут ехать машины, а по второй — нет, и наоборот. Будем считать что в момент переключения, могут проезжать машины с обеих дорог. Считается что машина проехала в момент переключения, если момент, когда она проехала, и момент переключения отличаются не более чем на 10^{-5}.
В соответствии с технической документацией период работы светофора зафиксирован и должен быть равен x, иначе говоря, должно выполняться равенство r\ +\ g\ =\ x. С соблюдением этого условия значения r и g можно выбрать любыми неотрицательными вещественными числами.
Для выбора оптимальных значений r и g было проведено исследование трафика на дорогах и получены следующие данные.
На каждой из дорог находится несколько машин, которые едут в сторону перекрестка. Машины не обгоняют друг друга. Каждый раз, когда машина догоняет более медленную, она снижает скорость и следует непосредственно за ней с соответствующей скоростью. Размерами машин и временем на изменение скорости можно пренебречь. Когда машина подъезжает к перекрестку, если горит зеленый свет или происходит переключение, то она немедленно проезжает перекресток. В противном случае машина останавливается и ждет включения зеленого света.
В момент 0 на первой дороге расположены n машин, i-я из них находится на расстоянии a_i метров от перекрестка и движется в его сторону со скоростью v_i м/с.
Аналогично, на второй дороге расположены m машин, i-я из них находится на расстоянии b_i метров от перекрестка и движется в его сторону со скоростью w_i м/с.
Чтобы пробок в городе было меньше, необходимо выбрать такие g и r, чтобы максимальное число машин, которые одновременно стоят на перекрестке, было как можно меньше.
Помогите управлению дорожного движения выбрать оптимальные g и r.
Формат ввода
В первой строке задано вещественное число x (1\ ≤\ x\ ≤\ 10^4), с не более чем тремя знаками после десятичной точки. Во второй строке задано число n (0\ ≤\ n\ ≤\ 100\ 000) — количество машин на первой дороге. Далее, в n строках задано описание машин на первой дороге. Описание каждой машины состоит из двух вещественных чисел a_i и v_i — расстояния от машины до перекрестка и ее скорости, соответственно (1\ ≤\ a_i,\ v_i\ ≤\ 10^4). Числа a_i и v_i заданы не более, чем с тремя знаками после десятичной точки.
В следующей строке задано число m (0\ ≤\ m\ ≤\ 100\ 000, 1\ ≤\ n\ +\ m\ ≤\ 100\ 000) — количество машин на второй дороге. Далее, в m строках задано описание машин на второй дороге. Описание каждой машины состоит из двух вещественных чисел b_i и w_i — расстояния от машины до перекрестка и ее скорости, соответственно (1\ ≤\ b_i,\ w_i\ ≤\ 10^4). Числа b_i и w_i заданы не более, чем с тремя знаками после десятичной точки.
Никакие две машины исходно не находятся в одной точке. Оба списка машин даны в порядке возрастания расстояния до светофора.
Формат вывода
На первой строке выходного файла выведите минимальное k, такое что выбором g и r можно добиться, чтобы на перекрестке никогда не стояло одновременно более k машин.
На второй строке выведите два вещественных числа g и r, позволяющие добиться искомого. Следует выводить g и r не менее чем с 6 знаками после десятичной точки.
Если существует несколько оптимальных решений, выведите любое.

Пример ввода 1

2.0
1 
1.0 1.0
2
1.0 1.0
2.0 2.0

Пример вывода 1

0
1.00000 1.00000

Пример ввода 2

4.0
3 
2.0 1.0
4.0 5.0
5.0 20.0
3
1.0 1.0
5.0 1.0
7.0 1.0

Пример вывода 2

1
2.00000 2.00000
В первом примере все машины подъезжают к перекрестку в момент 1. Сделав переключение светофора как раз в этот момент можно обеспечить проезд всех машин без ожидания.
Во втором примере на первой дороге ситуация развивается следующим образом. Сначала через 1/15 секунды третья машина догоняет вторую и ей приходится снизить скорость до 5 м/с. Затем они вместе догоняют первую машину в момент 0.5, им обеим приходится снизить скорость до 1 м/с. Так вместе они и подъезжают к перекрестку через 2 секунды после начала движения.
На второй дороге машины движутся с равной скоростью и подъезжают к перекрестку через 1, 5 и 7 секунд после начала движения, соответственно. При любом выборе g и r хотя бы одной машине придется ждать. Оптимально выбрать любое значение g от 2 до 3, включительно. В этом случае ждать будут первая и вторая машины на второй дороге, но одновременно на перекрестке будет находиться не более одной машины. Если выбрать g\ <\ 2, то придется ждать трем машинам на первой дороге, а если выбрать g\ >\ 3, то вторая и третья машины на второй дороге будут одновременно ждать на перекрестке.
Источник: XIX Командный чемпионат школьников Санкт-Петербурга по программированию, 2011
loading