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 diagonala este o linie dreapta între două vârfuri diferite care nu au o latura între ele.
Să definim mai întâi distanța de la vârful A la diagonala D. Să zicem că începem la vârful A și ne deplasăm la următorul vârf în ordinea acelor de ceasornic pâna ajungem la unul dintre vârfurile lui D. Numărul de muchii traversate il numim left_distance. Analog, right_distance este numărul de muchii traversate dacă începem de la A și ne deplasăm în direcția opusă acelor ceasului până ajungem la D. Distanța de la A la D este maximul dintre left_distance și right_distance.
În exemplul din imagine distanța de la vârful 0 la diagonala (1, 5) este 2 cu left_distance egal cu 1 și right_distance egal cu 2. Pentru diagonala (0, 5) distanț de la vârful 0 este 5, cu left_distance=5 și right_distance=2.
Anna vrea sa 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 desepre 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 apropiata (cu noțiunea de distanță de mai sus) diagonala desenata față de vârful 0. Îl veți ajuta să își îndeplinească scopul întrebând-o pe Anna un număr limitat de întrebări.
Restricții și precizări
Trebuie să implementați următoarea funcție în submisia voastră:
int solve (int n)
este numarul de varfuri ale poligonului.
Funcția de mai sus poate apela următoarea funcție:
int query (int x, int y)
- : indicele primului vârf
- : indicele celui de al doilea vârf
- returnează 1 dacă există o diagonală între și și altfel.
Urmează un exemplu de input pentru evaluator și apelurile de funcții corespunzătoare. Inputul este cel desenat in imaginea de mai sus.
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 .
Punctare
Fie numărul de interogări ce le faceți pe un singur test. Totodată fie .
- Dacă faci o interogare invalidă sau ghiciți răspunsul incorect veți primi din puncte.
- Dacă veți primi din puncte pentru test.
- Dacă veți primi din puncte pentru un test.
- Dacă veți primi din puncte pe test.