Bucătarul John s-a săturat din a mai face ciorbă de legume, a trecut la gătitul ciorbelor cu numere! Pentru a își duce la capăt procesul creativ, a cumpărat un aparat, dar din păcate acesta avea un mecanism avansat de blocare. Astfel, îți cere ajutorul pentru a-l debloca.
Cerință
Există un număr ascuns , care aparține de intervalul .
Ai voie să pui următorul fel de :
ask(Y)
Dacă , funcția va returna .
Dacă , funcția va returna . În plus, față de cazul anterior, numărul X va căpata o nouă valoare ce aparține de același interval, adică . Fiecare număr din interval are o probabilitate egală să fie ales drept noua valoare a lui .
Altfel, dacă , functia va returna 0, iar dvs. puteti sa incetati din a mai interactiona.
trebuie să aparțină de intervalul [1, N]. Altfel, interacțiunea se termină!
Protocolul de interacțiune
Concurentul trebuie să implementeze o funcție:
void solve(int N)
Parametrul N este cel menționat mai sus. Concurentul nu trebuie să implementeze funcția main.
Concurentul poate apela următoarea funcție pentru o interogare:
int ask(int Y)
Funcția se va comporta așa cum este descris în enunț.
Restricții și precizări
- ;
- Trebuie să includeți
bucataria.h
; - Puteți să vă scrieți codul in
bucataria.cpp
, completând direct funcția . - În cadrul unui test: Fie numărul de query-uri considerat optim de către comisie și fie numărul de query-uri pe care le face concurentul.
- Punctarea per test se face după următoarea formulă: , unde reprezintă numărul de puncte corespunzător respectivului test, iar este o eroare de bun simț pe care o permitem programului vostru, ca punctajul maxim să poată fi atins.
Exemplu
N = 10, X = 5
concurent: ask(3); comisia: +1,X=4
concurent: ask(5); comisia: -1
concurent: ask(4); comisia: 0
interacțiunea s-a terminat cu succes după 3 interogări.