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

printЗадачи

1693. Светофор

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

Всем известно, что в городах есть большая проблема — пробки. Пробка образуется, когда по дороге пытаются ехать сразу много машин. При этом основная причина образования пробок — перекрестки. Самые большие пробки образуются именно на них.
В одном городе на перекрестке, на котором пересекаются две односторонние дороги, решили установить светофор.
В каждый момент светофор либо горит зеленым для машин на первой дороге, либо горит зеленым для машин на второй дороге, либо переключается между этими режимами. По правилам дорожного движения, в моменты переключения светофора можно ехать по любой дороге.
Светофор устроен следующим образом. В момент времени `0` он загорается зеленым для машин на первой дороге и красным для машин на второй дороге. Далее, через `g` секунд он переключается на красный для машин на первой дороге и зеленый для машин на второй дороге, после чего через `r` секунд переключается обратно на зеленый для первой дороги, и т. д.
Таким образом, светофор горит зеленым для первой дороги в моменты времени `(\ k(r\ +\ g),\ k(r\ +\ g)\ +\ g)` для целых `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