En Guillem Tell entrena la seva punteria llençant fletxes contra una diana. El centre de la diana és el punt del pla, i cada fletxa acaba clavada en un punt .
Escriu un programa que mantingui un taulell amb els tirs més propers al centre de la diana. El programa rep dos enters, i . Després llegeix una seqüència de punts 2D (les posicions de cada fletxa). Cada tirs, el programa ha de mostrar el taulell amb els tirs més propers al centre, ordenats de més proper a més llunyà. Si dos tirs tenen la mateixa distància al centre, va primer el que té la coordenada més petita, i si coincideixen, el que té la més petita.
Si en algun moment hi ha menys de tirs, el taulell mostra només els que hi hagi.
Si al final de l’entrada la quantitat de tirs no és múltiple de , cal mostrar el taulell una última vegada.
La primera línia conté dos enters i . Les línies següents contenen dos reals i cadascuna, les coordenades de cada tir.
Cada
tirs, el taulell amb els
tirs més propers al centre (o menys si no n’hi ha prou), un per línia
amb el format (x, y). Entre dues taules consecutives, una
línia amb ---.
El centre d’interès en aquest problema és l’eficiència.
No cal calcular arrels quadrades per comparar distàncies al centre: és equivalent a .
Si feu servir un Heap, penseu quin signe ha de tenir la
prioritat perquè el tir “pitjor” dels
millors estigui sempre accessible al capdamunt.
Als fitxers públics (icona del gatet) trobaràs els contenidors de
PRO2 (stack.hh, queue.hh,
heap.hh, i la seva dependència assert.hh), un
program.cc buit per començar, un Makefile i el
directori .vscode amb la configuració per compilar i
debuggar amb VSCode.
Implementa el programa al fitxer program.cc i envia’l al
Jutge. Pots fer servir qualsevol contenidor de la STL i els de PRO2 que
necessitis.
Input
3 4 1.0 2.0 -0.5 0.3 3.0 4.0 0.1 -0.1
Output
(0.1, -0.1) (-0.5, 0.3) (1, 2)
Input
5 3 1.0 1.0 -2.0 0.5 0.1 0.2 0.0 0.5 -1.0 -1.05 3.0 3.0 -0.1 0.1
Output
(0.1, 0.2) (1, 1) (-2, 0.5) --- (0.1, 0.2) (0, 0.5) (1, 1) (-1, -1.05) (-2, 0.5) --- (-0.1, 0.1) (0.1, 0.2) (0, 0.5) (1, 1) (-1, -1.05)