CSES - Tulostepohjaiset interaktiiviset tehtävät

Tulostaminen

Yleinen tapa rakentaa interaktiivisia tehtäviä on standardisyötevirran ja -tulostevirran kautta (niin kutsutut stdin ja stdout).

Tällaisissa kommunikaatiotehtävissä ratkaisusi "keskustelee" kisajärjestelmän kanssa virtojen kautta tulostamalla kysymyksiä ja lukemalla niiden vastauksia

Tulostamisen jälkeen on tärkeä muistaa tyhjentää (flush) tulostepuskuri, jotta tuloste varmasti saapuu arvostelijalle ennen kuin ohjelma yrittää lukea vastausta. C++:ssa std::endl:n tulostaminen std::cout:lla tulostaa rivinvaihdon ja tyhjentää puskurin.

cout << endl;

C-tyylisellä tulosteella tulostepuskurin saa tyhjennettyä koodirivillä:

fflush(stdout);

Esimerkkitehtävä

Virtahaku-tehtävässä, jossa tehtävänä on etsiä 30:n kyselyn avulla luku 1 \le x \le 10^9, tuloste ja syöte -ketju voisi näyttää tältä:

? 4
QAQ
? 6
10-4
! 5

Jokaiseen kyselyyn arvostelija vastaa 10-4, jos annettu luku on x:ää suurempi, muutoin QAQ.