Puncte de intersectie


Trimite soluție

Puncte: 10
Limita de timp: 2.0s
Python 3 4.0s
Limita de memorie: 256M

Autori:
Tipuri de probleme
Limbajele acceptate
Assembly, C, C++, Java, Python

Descriere

Se dă o mulțime de \(n\) segmente în planul \(\mathbb R^2\). Se presupune că fiecare segment al mulțimii este orizontal sau vertical. Vi se cere să determinați numărul total de puncte de intersecție dintre segmentele orizontale și cele verticale.

Date de intrare

Se va citi de la tastatură un număr natural \(n\), reprezentând numărul de segmente. Urmează, pe \(n\) rânduri distincte, coordonatele extremităților segmentelor. Astfel, al \(i\)-lea dintre aceste rânduri va conține patru numere întregi \(x_{i,1} \ y_{i,1} \ x_{i,2} \ y_{i,2}\), separate prin câte un spațiu, reprezentând coordonatele extremităților segmentului \(s_i\) (așadar, segmentul \(s_i\) este determinat de punctele \(P_{i,1}=(x_{i,1} , y_{i,1})\) și \(P_{i,2}=(x_{i,2} , y_{i,2})\)).

Date de ieșire

Programul va afișa pe ecran numărul total de puncte de intersecție dintre segmentele orizontale și cele verticale.

Restricții și precizări

  • \(1 \leq n \leq 10^5\).
  • \(-10^6 \leq x_{i,1} \leq x_{i,2} \leq 10^6\).
  • \(-10^6 \leq y_{i,1} \leq y_{i,2} \leq 10^6\).
  • \((x_{i,1} \ y_{i,1}) \not= (x_{i,2} \ y_{i,2})\).
  • Segmentele au doar puncte de intersecție interioare, deci niciunul dintre capetele segmentelor nu este punct de intersecție

Exemplu

Input
6
4 -4 4 8
2 -1 7 -1
-5 6 0 6
-2 -3 -2 5
2 -5 9 -5
-3 2 6 2
Output
3
Explicație

Coordonatele de mai sus corespund următoarei figuri, în care sunt în total trei puncte de intersecție (marcate cu roșu) între segmentele orizontale și cele verticale:

Reprezentarea grafică a datelor din exemplu

Observație

Această problemă poate fi găsită (și rezolvată) și aici.