QOJ.ac

QOJ

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

#14946. Kollisionsschaden

Statistics

In einem 2D-physikbasierten Videospiel bewegen sich zwei Charaktere $P$ und $Q$ über das Schlachtfeld. Jeder Charakter wird durch ein konvexes Polygon dargestellt, das als seine Kollisionsbox dient. Wenn sich die beiden Kollisionsboxen überlappen, berechnet das Spiel den Flächeninhalt ihrer Schnittmenge als Kollisionsschaden.

Aufgrund unvorhersehbarer Windströmungen in der Arena kann Charakter $Q$ jedoch um einen beliebigen Verschiebungsvektor $\mathbf{t} = (t_x, t_y)$ verschoben werden, sich aber weder drehen noch spiegeln. Sie müssen den erwarteten Kollisionsschaden berechnen, wenn $Q$ gleichverteilt und zufällig so platziert wird, dass er tatsächlich mit $P$ kollidiert, d. h. ihre Schnittmenge einen positiven Flächeninhalt hat.

Formaler ausgedrückt: Definieren Sie $f(\mathbf{t})$ als den Flächeninhalt der Schnittmenge zwischen dem Polygon, das Charakter $P$ darstellt, und dem Polygon, das Charakter $Q$ nach der Verschiebung entlang $\mathbf{t}$ darstellt. Sei $D \subseteq \mathbb{R}^2$ die Menge aller Verschiebungsvektoren $\mathbf{t}$, für die $f(\mathbf{t}) > 0$ gilt. Es lässt sich zeigen, dass $D$ einen positiven Flächeninhalt besitzt, der mit $|D|$ bezeichnet wird. Sie müssen $\frac{1}{|D|} \iint_D f(\mathbf{t})\,d\mathbf{t}$ berechnen.

Eingabe

Die erste Zeile der Eingabe enthält eine ganze Zahl $T$ ($1 \le T \le 300$), die die Anzahl der Testfälle angibt. Für jeden Testfall gilt:

  • Die erste Zeile enthält zwei ganze Zahlen $n$ und $m$ ($3 \le n, m \le 1\,000$), die jeweils die Anzahl der Eckpunkte der beiden konvexen Polygone angeben.
  • Darauf folgen $n$ Zeilen mit jeweils zwei ganzen Zahlen $x$ und $y$ ($-10^4 \le x, y \le 10^4$), welche die Eckpunktkoordinaten $(x, y)$ des Polygons angeben, das Charakter $P$ darstellt.
  • Darauf folgen $m$ Zeilen mit jeweils zwei ganzen Zahlen $x$ und $y$ ($-10^4 \le x, y \le 10^4$), welche die Eckpunktkoordinaten $(x, y)$ des Polygons angeben, das Charakter $Q$ darstellt.
  • Es wird garantiert, dass die Eckpunkte eines konvexen Polygons gegen den Uhrzeigersinn angegeben sind und keine drei davon kollinear sind.

Es wird garantiert, dass sowohl die Summe von $n$ als auch die Summe von $m$ über alle Testfälle $1\,000$ nicht überschreitet.

Ausgabe

Geben Sie für jeden Testfall eine Zeile mit einer reellen Zahl aus, die den erwarteten Kollisionsschaden darstellt.

Ihre Antwort wird akzeptiert, wenn ihr absoluter oder relativer Fehler $10^{-6}$ nicht überschreitet. Formal ausgedrückt: Angenommen, Ihre Ausgabe ist $a$ und die Antwort der Jury ist $b$, dann wird Ihre Ausgabe genau dann akzeptiert, wenn $\frac{|a - b|}{\max(1, |b|)} \le 10^{-6}$ gilt.

Beispiele

Eingabe 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

Ausgabe 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.