QOJ.ac

QOJ

Time Limit: 1.0 s Memory Limit: 1024 MB Total points: 100 Hackable ✓

#14946. Урон от столкновения

Statistics

В двумерной видеоигре, основанной на физике, два персонажа $P$ и $Q$ перемещаются по полю боя. Каждый персонаж представлен выпуклым многоугольником, который служит его хитбоксом (областью столкновения). Когда два хитбокса перекрываются, игра вычисляет площадь их пересечения в качестве урона от столкновения.

Однако из-за непредсказуемых потоков ветра на арене персонаж $Q$ может смещаться на произвольный вектор параллельного переноса $\mathbf{t} = (t_x, t_y)$, но не может поворачиваться или отражаться. Вам необходимо вычислить математическое ожидание урона от столкновения, когда $Q$ размещается равномерно и случайно таким образом, что он действительно сталкивается с $P$, то есть их пересечение имеет положительную площадь.

Более формально, определим $f(\mathbf{t})$ как площадь пересечения многоугольника, представляющего персонажа $P$, и многоугольника, представляющего персонажа $Q$ после параллельного переноса на вектор $\mathbf{t}$. Пусть $D \subseteq \mathbb{R}^2$ — множество всех векторов переноса $\mathbf{t}$, для которых $f(\mathbf{t}) > 0$. Можно показать, что $D$ имеет положительную площадь, обозначаемую $|D|$. Вам нужно вычислить $\frac{1}{|D|} \iint_D f(\mathbf{t})\,d\mathbf{t}$.

Входные данные

Первая строка входных данных содержит целое число $T$ ($1 \le T \le 300$) — количество наборов входных данных. Для каждого набора входных данных:

  • Первая строка содержит два целых числа $n$ и $m$ ($3 \le n, m \le 1\,000$), обозначающих количество вершин двух выпуклых многоугольников соответственно.
  • Далее следуют $n$ строк, каждая из которых содержит два целых числа $x$ и $y$ ($-10^4 \le x, y \le 10^4$), задающих координаты вершин $(x, y)$ многоугольника, представляющего персонажа $P$.
  • Затем следуют $m$ строк, каждая из которых содержит два целых числа $x$ и $y$ ($-10^4 \le x, y \le 10^4$), задающих координаты вершин $(x, y)$ многоугольника, представляющего персонажа $Q$.
  • Гарантируется, что вершины выпуклого многоугольника заданы в порядке обхода против часовой стрелки и никакие три из них не лежат на одной прямой.

Гарантируется, что как сумма $n$, так и сумма $m$ по всем наборам входных данных не превышают $1\,000$.

Выходные данные

Для каждого набора входных данных выведите строку, содержащую вещественное число — математическое ожидание урона от столкновения.

Ваш ответ будет засчитан, если его абсолютная или относительная погрешность не превышает $10^{-6}$. Формально говоря, если ваш вывод равен $a$, а ответ жюри равен $b$, ваш вывод принимается тогда и только тогда, когда $\frac{|a - b|}{\max(1, |b|)} \le 10^{-6}$.

Примеры

Входные данные 1

2
3 3
0 0
1 0
0 1
0 0
1 0
0 1
3 3
0 0
1 0
0 1
0 1
1 0
1 1

Выходные данные 1

0.083333333333
0.125000000000

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.