QOJ.ac

QOJ

Süre Sınırı: 1.0 s Bellek Sınırı: 1024 MB Toplam puan: 100 Hack'lenebilir ✓

#14946. Danno da collisione

İstatistikler

In un videogioco 2D basato sulla fisica, due personaggi $P$ e $Q$ si muovono sul campo di battaglia. Ogni personaggio è rappresentato da un poligono convesso che funge da suo riquadro di collisione (collision box). Quando i due riquadri di collisione si sovrappongono, il gioco calcola l'area della loro intersezione come danno da collisione.

Tuttavia, a causa di imprevedibili correnti di vento nell'arena, il personaggio $Q$ può essere spostato di un vettore di traslazione arbitrario $\mathbf{t} = (t_x, t_y)$, ma non può ruotare né ribaltarsi. Devi calcolare il danno da collisione atteso quando $Q$ viene posizionato in modo uniforme e casuale tale da collidere effettivamente con $P$, ossia in modo che la loro intersezione abbia un'area positiva.

Più formalmente, definiamo $f(\mathbf{t})$ come l'area dell'intersezione tra il poligono che rappresenta il personaggio $P$ e il poligono che rappresenta il personaggio $Q$ dopo essere stato traslato lungo $\mathbf{t}$. Sia $D \subseteq \mathbb{R}^2$ l'insieme di tutti i vettori di traslazione $\mathbf{t}$ per i quali $f(\mathbf{t}) > 0$. Si può dimostrare che $D$ ha un'area positiva, indicata con $|D|$. Devi calcolare $\frac{1}{|D|} \iint_D f(\mathbf{t})\,d\mathbf{t}$.

Input

La prima riga dell'input contiene un intero $T$ ($1 \le T \le 300$), che indica il numero di casi di test. Per ciascun caso di test:

  • La prima riga contiene due interi $n$ e $m$ ($3 \le n, m \le 1\,000$), che indicano rispettivamente il numero di vertici dei due poligoni convessi.
  • Seguono poi $n$ righe, ciascuna contenente due interi $x$ e $y$ ($-10^4 \le x, y \le 10^4$), che forniscono le coordinate $(x, y)$ dei vertici del poligono che rappresenta il personaggio $P$.
  • Seguono poi $m$ righe, ciascuna contenente due interi $x$ e $y$ ($-10^4 \le x, y \le 10^4$), che forniscono le coordinate $(x, y)$ dei vertici del poligono che rappresenta il personaggio $Q$.
  • È garantito che i vertici di ciascun poligono convesso siano forniti in senso antiorario e che non vi siano tre vertici collineari.

È garantito che sia la somma di $n$ sia la somma di $m$ su tutti i casi di test non superino $1\,000$.

Output

Per ciascun caso di test, stampa una riga contenente un numero reale che rappresenta il danno da collisione atteso.

La tua risposta è considerata accettabile se il suo errore assoluto o relativo non supera $10^{-6}$. Formalmente, supponendo che il tuo output sia $a$ e la risposta della giuria sia $b$, il tuo output è accettato se e solo se $\frac{|a - b|}{\max(1, |b|)} \le 10^{-6}$.

Esempi

Input 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

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