Revizia anterioară Revizia următoare
Fişierul intrare/ieşire: | cmap.in, cmap.out | Sursă | Arhiva educationala |
Autor | Arhiva Educationala | Adăugată de | |
Timp execuţie pe test | 0.2 sec | Limită de memorie | 20480 kbytes |
Scorul tău | N/A | Dificultate | N/A |
Vezi solutiile trimise | Statistici
Cele mai apropiate puncte din plan
Se dau N puncte în plan cu coordonate numere întregi. Sa se determine distanta intre cele mai apropiate 2 puncte.
Date de intrare
Fişierul de intrare cmap.in conţine pe prima linie un număr N, cu semnificaţia din enunţ. Pe următoarele N linii se vor afla doua numere Xi şi Yi, coordonatele celui de-al i-lea punct.
Date de ieşire
În fişierul de ieşire cmap.out se va afişa distanta intre cele mai apropiate 2 puncte.
Restricţii
- 1 ≤ N ≤ 100 000
- -1 000 000 000 ≤ Xi ≤ 1 000 000 000
- -1 000 000 000 ≤ Yi ≤ 1 000 000 000
- Oricare doua puncte sunt distincte.
- Pentru 20% din teste 1 ≤ N ≤ 1 000
Exemplu
cmap.in | cmap.out |
---|---|
10 26 77 12 37 14 18 19 96 71 95 91 9 98 43 66 77 2 75 94 91 | 18.681542 |
Indicaţii de rezolvare
O soluţie brute-force de complexitate O(N*N) obţine 20 de puncte.
O alta soluţie de complexitate O(N*N) sortează numerele crescător după abscisa şi apoi foloseşte un algoritm divide et impera. Se împart cele N puncte în doua grupuri st şi dr, se calculează st_min şi dr_min, distanta intre cele mai apropiate puncte din grupul st şi dr, apoi se calculează st_dr_min, distanta intre cele mai apropiate 2 puncte, unul aparţinând grupului st şi altul lui dr. Distanta intre cele mai apropiate puncte o sa fie minim(st_min, dr_min, st_dr_min).