Nu aveti permisiuni pentru a descarca fisierul grader_test5.ok
Diferente pentru problema/cbinteractiv intre reviziile #6 si #28
Nu exista diferente intre titluri.
Diferente intre continut:
== include(page="template/taskheader" task_id="cbinteractiv") ==
Se daun numar $N$si interactorul are un numar *ascuns*, $K$ de la $1$ la $N$ pe care voi trebuie sail gasiti. Putetiintreba de un numar $X$ iar interactorul vava spune dacaacesta este mai mare sau egal decat $K$.
Se dă un număr $N$ şi interactorul are un număr *ascuns*, $K$ de la $1$ la $N$ pe care voi trebuie să îl găsiţi. Puteţi întreba de un număr $X$ iar interactorul vă va spune dacă acesta este mai mare sau egal decât $K$.
h2. Interactiune
h2. Interacţiune
Initial se citeste din _stdin_ numarul $N$. Programul vostru are voie sapunaquery-uri scriindin _standard output_:
Iniţial se citeşte din _stdin_ numărul $N$. Programul vostru are voie să pună query-uri scriind în _standard output_:
* "<tex> ?\;X </tex>" reprezentandintrebarea.
* "<tex> ?\;X </tex>" reprezentând întrebarea.
Dupafiecare astfel de query interactorul va raspundein _stdin_ cu un numar din multimea <tex> \{-1, 0, 1\} </tex>:
După fiecare astfel de query interactorul vă va răspunde în _stdin_ cu un număr din mulţimea <tex> \{-1, 0, 1\} </tex>:
* "0" daca$K$ > $X$ * "1" daca$K$ ≤ $X$ * "-1" dacaquery-ul este invalid
* "0" dacă $K$ > $X$ * "1" dacă $K$ ≤ $X$ * "-1" dacă query-ul este invalid, trebuie să închideţi programul după ce primiţi acest verdict. Un query este considerat valid dacă $1 ≤ X ≤ N$
Dupace ati aflat numarul $K$ afisati "<tex> !\;K </tex>"si terminati programul. Dupafiecare query, inclusiv cel final trebuie saafisati '\n'si sadati flush la _standard output_. Pentru a da flush vaputeti folosi de urmatorul tabel.
După ce aţi aflat numărul $K$ afişaţi "<tex> !\;K </tex>" şi terminaţi programul. După fiecare query, inclusiv cel final trebuie să afişaţi '\n' şi să daţi flush la _standard output_. Pentru a da flush vă puteţi folosi de următorul tabel.
table(example). |_. C++ |_. Pascal |_. Python |_. Java |
table(example). |_. Limbaj |_. C/C++ |_. Pascal |_. Python |_. Java |_. Rust | | Header necesar | | | import sys | | use std::io::{self,Write}; | | Funcţie
| fflush(stdout) sau cout.flush() | flush(output)
| stdout.flush()
| sys.stdout.flush()
| System.out.flush()
| io::stdout().flush().unwrap();
| h2. Restricţii * $1 ≤ N ≤ 10^9$
* Pentru $30%$ din teste $N ≤10^3$
* Pentru $30%$ din teste $N ≤ 500$
h2. Punctare
Dacanumarul gasit de voi este diferit de $K$, punctajul pe acel test va fi $0$. Altfel, punctajul vostru va fi decisin functie de Q numarul de queryuri facute de programul vostru:
Dacă numărul găsit de voi este diferit de $K$, punctajul pe acel test va fi $0$. Altfel, punctajul vostru va fi decis în funcţie de Q numărul de query-uri făcute de programul vostru:
* $Q ≤ 32$, $100%$ din punctajul pe acel test.
* $Q ≤N$, $30%$ din punctajul pe acel test. * $Q >N$, $0%$ din punctajul pe acel test.
* $Q ≤ 500$, $30%$ din punctajul pe acel test. * $Q > 500$, $0%$ din punctajul pe acel test.
h2. Exemplu
table(example). |_. stdin |_. stdout |_. Explicatie |
table(example). |_. stdin |_. stdout |_. Explicaţie |
|10 |
| Se citeste $N$
| Se citeşte $N$
| | |? 5
| |1 |
| Se raspunde ca$K$ <= $X$
| Se răspunde că $K$ <= $X$
| | |? 4
| |0 |
| Se raspunde ca$K$ > $X$
| Se răspunde că $K$ > $X$
| | | ! 5
| Programul a descoperit valoarea lui Ksi raspunde.
| Programul a descoperit valoarea lui K şi răspunde.
|
h2. Aplicatii
h2. Explicaţie Problemele interactive devin din ce în ce mai comune, inclusiv pe infoarena. La astfel de probleme inputul şi outputul sunt speciale, în acest sens există un interactor cu care puteţi comunica, adică outputul sau este inputul vostru şi vice-versa. Această este o reprezentare interactivă a problemei "căutării binare":problema/cautbin . Problemele interactive pot fi abordate în toate limbajele suportate de infoarena: "C":job_detail/2750856?action=view-source, "C++":job_detail/2750854?action=view-source, "Python":job_detail/2750858?action=view-source, "Rust":job_detail/2750843?action=view-source, "Java":job_detail/2750838?action=view-source, "Pascal":job_detail/2750862?action=view-source. Atunci când rezolvăm probleme interactive trebuie să fim atenţi la faptul că înainte ca outputul să ajungă la interactor acesta este ţinut într-un buffer intern. O cauza comună a greşelilor la problemele interactive este faptul că outputul nu iese din buffer, de aceea noi forţăm transferul de informaţii de la buffer la interactor prin instrucţiunea de *flush*. Această problema este dată ca exemplu în "ghidul":ghid-adaugare-interactive de adăugat probleme interactive. h2. Aplicaţii
* "Mixed Signals":https://infoarena.ro/problema/mixedsignals * "Popa":https://infoarena.ro/problema/popa * "Password2":https://www.infoarena.ro/problema/password2 * "Hidden Points":https://www.infoarena.ro/problema/hidden_points * "Shopping":https://infoarena.ro/problema/shopping * "Interact":https://infoarena.ro/problema/interact
* "Mixed Signals":problema/mixedsignals * "Anagrame2":problema/anagrame2 * "Popa":problema/popa * "Password2":problema/password2 * "Hidden Points":problema/hidden_points * "Shopping":problema/shopping * "Interact":problema/interact
== include(page="template/taskfooter" task_id="cbinteractiv") ==