Deși s-a îndrăgostit de Miruna, Tassadar nu își neglijează atribuțiile de comandant și planifică un asalt asupra planetei Tarsonis. Pe această planetă se află capitale numerotate de la la , reprezentate sub forma unor puncte în plan. Tassadar și-a infiltrat câte un spion în fiecare capitală. Spionii sunt conectați la rețeaua telepatică numită Khala și pot comunica pe această cale. Ei nu știu la ce coordonate se află, însă pot simți distanța la care se află față de oricare alt spion.
Pentru a afla distanța dintre doi spioni, Tassadar trebuie să se concentreze intens și să se conecteze la mintea ambilor spioni simultan. El vrea să reconstituie harta celor capitale interogând un număr minim de perechi de spioni, deoarece vrea să își păstreze forțele pentru provocările Mirunei.
Ajutați-l pe Tassadar să reconstituie harta și să cucerească planeta!
Interacțiune
Pentru a rezolva această problemă, va trebui ca în sursa voastră să existe următoarea funcție:
void recover(int N);
Această funcție va fi apelată o singură dată la începutul execuției programului și va primi ca parametru numărul de capitale. Din cadrul acesteia, puteți apela de câte ori doriți următoarea funcție, pusă la dispoziția voastră de către programul comisiei:
double query(int a, int b);
Prin apelul acestei funcții, efectuați o interogare a spionilor cu indicii și . Funcția returnează distanța dintre capitalele în care se află cei doi spioni. Atât , cât și , trebuie să fie numere distincte, mai mari sau egale cu și mai mici decât . Pentru a reconstitui harta, va trebui să apelați următoarea funcție:
void sendRecovered(double *x, double *y);
Această funcție primește ca parametri doi vectori de lungime indexați de la , reprezentând coordonatele celor capitale. Apelul acestei funcții va duce la terminarea execuției programului.
Restricții și precizări
- O hartă se consideră validă dacă distanța dintre oricare două capitale corespunde cu realitatea și dacă toate capitalele au coordonatele numere reale cuprinse în intervalul
- Distanța dintre două capitale ale căror coordonate au fost reconstituite se consideră corectă dacă diferă cu o eroare absolută sau relativă de cel mult față de distanța reală
- Există cel puțin o soluție în care toate capitalele au coordonatele cuprinse în intervalul
- Pentru din teste, toate capitalele sunt coliniare
- Fie numărul de interogări efectuate. Punctajul acordat pentru un test va fi:
- din punctaj dacă
- din punctaj dacă
- din punctaj dacă
Exemplul 1
Acțiuni grader
recover(2)
return 2.1
-
Acțiuni concurent
-
query(0, 1)
sendRecovered({0.0, 2.1}, {1.0, 1.0})
Explicație
Tassadar interoghează spionii și . Aceștia se află la o distanța unul față de celălalt. Deoarece sunt numai două capitale, orice pereche de puncte situate la distanță este corectă. De exemplu, punctele și .