arbore

Time limit: 0.8s Memory limit: 64MB Input: arbore.in Output: arbore.out

Cerință

Miruna și Sonia au inventat următorul joc:

  • Miruna se gândește la un arbore cu NN noduri (numerotate de la 11 la NN).
  • Sonia îi pune întrebări Mirunei sub forma unui triplet de noduri distincte (A,B,C)(A, B, C). Miruna trebuie să calculeze care este nodul DD pentru care suma distanțelor la nodurile AA, BB și CC este minimă și să i-l spună Soniei.
  • Scopul Soniei este să afle structura arborelui folosind un număr cât mai mic de întrebări.

Dându-se un arbore cu NN noduri, scrieți un program care îi află toate muchiile folosind un număr cât mai mic de întrebări.

Interacțiune

Programul vostru nu va implementa funcția main și nu se va folosi de niciun fișier text. În schimb, va implementa funcția

std::vector<std::pair<int, int>> solve(int N);

ce va returna un vector cu N1N - 1 perechi de valori ce reprezintă muchiile arborelui cu NN noduri și structura căutată. În cadrul funcției puteți interacționa cu funcția

int query(int A, int B, int C);

implementată de comisie, ce va returna nodul pentru care suma distanțelor la nodurile AA, BB și CC este minim.

Restricții și precizări

  • Funcția solve va fi apelată de maxim T5T \leq 5 ori în cadrul unui test
  • 3N1 0003 \leq N \leq 1 \ 000

Punctaj

Fie XX numărul de întrebări pe care le folosește programul comisiei:

  • Dacă programul vostru pune cel mult 2X2 \cdot X întrebări va primi 100%100\% din punctaj.
  • Dacă programul vostru pune cel mult 5X5 \cdot X întrebări va primi 50%50\% din punctaj.

Punctajul pentru un test va fi 00 dacǎ apare una dintre următoarele situaţii:

  • Programul vostru folosește mai mult de 5X5 \cdot X întrebări
  • Programul vostru depǎşeşte timpul maxim de execuţie/test;
  • Programul vostru nu respectǎ protocolul de interacțiune;
  • Programul vostru nu „ghicește” toți cei TT arbori.

Exemplu de interacțiune

Comisie: solve(3)
Concurent: query(1, 2, 3)
Comisie: return 3
Concurent: return {{1, 3}, {2,3}}
Comisie: solve(4)
Concurent: query(1, 2, 3)
Comisie: 1
Concurent: query(1, 2, 4)
Comisie: 1
Concurent: query(1, 3, 4)
Comisie: 1
Concurent: return {{1,2},{1,3},{1,4}}

Log in or sign up to be able to send submissions!