Ctrl K

Линия, делящая площадь пополам

Сложная
На плоскость положили квадратные плитки со сторонами, параллельными осям. Плитка tiles[i] = [x, y, l] имеет левый нижний угол в точке (x, y) и сторону l. Плитки могут накрывать друг друга; место, закрытое несколькими плитками, считается **один раз**. Найдите наименьшую координату y горизонтальной прямой, при которой закрытая плитками площадь над прямой равна закрытой площади под ней. Ответ засчитывается, если отличается от точного не больше чем на 10⁻⁵.
Пример 1
tiles=[[0, 0, 2], [1, 1, 2]] → 1.5

Квадраты перекрываются в клетке 1 × 1, поэтому закрытая площадь 4 + 4 − 1 = 7, половина — 3,5. Ниже y = 1 закрыта полоса шириной 2 (площадь 2), выше — полоса шириной 3. Не хватает 1,5, это ещё 0,5 по высоте: ответ 1,5.

Пример 2
tiles=[[0, 0, 1], [0, 3, 1]] → 1.0

Площадь 2, под линией нужна 1. Любая линия от y = 1 до y = 3 делит её поровну; наименьшая — y = 1.

Пример 3
tiles=[[4, 4, 2]] → 5.0
Ограничения
  • 1 ≤ len(tiles) ≤ 5·10⁴
  • tiles[i] — тройка целых чисел [x, y, l]
  • 0 ≤ x, y ≤ 10⁹
  • 1 ≤ l ≤ 10⁹
  • Площадь, закрытая плитками (перекрытия считаются один раз), не больше 10¹⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКонтур городской застройки СложнаяМеньшие справа СложнаяСуммы отрезков в заданной полосе СложнаяПары с крутым спадом СложнаяПлощадь объединения прямоугольников Сложная
загружаем Python…
Вход
tiles=[[0, 0, 2], [1, 1, 2]]
Ожидается
1.5

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 94 теста на сервере, включая скрытые.