
Anna a desenat un poligon cu vârfuri numerotate de la la în ordinea acelor de ceasornic. Mai târziu a triangulat poligonul desenând diagonale care nu se intersectează cu excepția posibilă a vârfurilor. O diagonală este o linie dreaptă între două vârfuri diferite care nu au o latură între ele.
Să definim mai întâi distanța de la vârful la diagonala . Să zicem că începem la vârful și ne deplasăm la următorul vârf în ordinea acelor de ceasornic până ajungem la unul dintre vârfurile lui . Numărul de muchii traversate îl numim . Analog, este numărul de muchii traversate dacă începem de la și ne deplasăm în direcția opusă acelor ceasului până ajungem la . Distanța de la la este maximul dintre și .
În exemplul din imagine, distanța de la vârful la diagonala este , cu și . Pentru diagonala distanța de la vârful este , cu și .
Cerință
Anna vrea să facă din acest lucru o provocare pentru Jacob. Jacob nu știe diagonalele desenate. El știe doar valoarea lui , dar o poate întreba pe Anna de mai multe ori despre perechi de vârfuri și ea îi va spune dacă se găsește o muchie între vârfurile acelea. Scopul lui Jacob este să găsească cea mai apropiată (cu noțiunea de distanță de mai sus) diagonală desenată față de vârful . Îl veți ajuta să își îndeplinească scopul întrebând-o pe Anna un număr limitat de întrebări.
Protocol de interacțiune
Trebuie să implementați următoarea funcție în submisia voastră:
int solve (int n);
- Funcția se apelează exact o dată de către evaluator.
- este numărul de vârfuri ale poligonului.
- Funcția ar trebui să returneze diagonala între niște vârfuri și ca un întreg cu valoarea .
- Dacă sunt mai multe diagonale cu aceeași distanță minimă, puteți să returnați oricare.
Funcția de mai sus poate apela următoarea funcție:
int query (int x, int y);
- este indicele primului vârf.
- este indicele celui de-al doilea vârf.
- Returnează dacă există o diagonală între și și altfel.
- Pentru a putea apela această funcție, trebuie inclus header-ul
triangulation.hîn submisia voastră (#include "triangulation.h")!
Restricții și precizări
Punctare
Fie numărul de interogări ce le faceți pe un singur test. Totodată fie .
- Dacă faceți o interogare invalidă sau ghiciți răspunsul incorect veți primi din puncte pentru un test.
- Dacă veți primi din puncte pentru un test.
- Dacă veți primi din puncte pentru un test.
- Dacă veți primi din puncte pentru un test.
Exemplu de interacțiune
Urmează un exemplu de input pentru evaluator și apelurile de funcții corespunzătoare. Inputul este cel desenat în imaginea de mai sus.

Testare locală
Aveți la dispoziție fișierul grader_local.cpp în lista de atașamente. Cu ajutorul acestuia puteți să testați sursa local.
Singura linie din input corespunde lui . Evaluatorul va afișa fiecare apel al lui query la stdout și trebuie să îi răspundeți manual cu sau .