Darbs ar interaktīvajiem uzdevumiem

Interaktīvajos uzdevumos risinājums darbības laikā sazinās ar vērtēšanas sistēmu. Atšķirībā no parastajiem uzdevumiem, kuros risinājums nolasa ievaddatus un izvada atbildi vienā piegājienā, šeit risinājums un sistēma apmainās ar vairākām ziņām, līdz tiek atrasta atbilde vai risinājums tiek noraidīts.

Kā notiek saziņa

  • Risinājums lasa sistēmas ziņas no standarta ievades plūsmas (stdin), bet savus vaicājumus raksta uz standarta izvades plūsmu (stdout).
  • Precīzais ziņu formāts un secība ir aprakstīta uzdevuma sadaļā "Komunikācija" — tā ir jāievēro burtiski.
  • Sarunu var uzsākt gan sistēma, gan risinājums; to nosaka konkrētais uzdevums.
  • Kad sistēma apstiprina atbildi (piemēram, atbildot ar 0), risinājumam ir jābeidz darbība. Sistēma neatbildēs uz tālākiem vaicājumiem.
  • Uzdevuma lapas sadaļā "Piemērs" ir redzams saziņas piemērs — tur vari apskatīt, kā izskatās konkrētā uzdevuma ziņu apmaiņa.

Izvades sinhronizācija

Pēc katra vaicājuma izvades plūsma ir jāsinhronizē (jāiztīra jeb flush). Pretējā gadījumā sistēma var nesaņemt vaicājumu, un risinājums var iestrēgt, gaidot atbildi, kas nekad nepienāks.

ValodaPiemērs
C++std::cout << x << std::endl; — std::endl nodrošina sinhronizāciju
Gofmt.Println(x) — standarta izvade nav īpaši jāsinhronizē
JavaSystem.out.println(x); System.out.flush();
Pascalwriteln(x); flush(output);
Pythonprint(x, flush=True)

Vaicājumu ierobežojumi un statusi

  • Katram interaktīvajam uzdevumam ir noteikts maksimālais vaicājumu skaits vienā testā. Ja tas tiek pārsniegts, testa statuss pēc pārbaudes būs "Nepareiza atbilde".
  • Risinājumam joprojām ir spēkā uzdevumā norādītie laika un atmiņas ierobežojumi, un tie attiecas uz visu saziņas laiku.
  • Ja saziņa ieilgst (piemēram, risinājums un sistēma gaida viens otru), risinājums tiek pārtraukts.
  • Kļūdas ziņas vari rakstīt uz kļūdu plūsmu (stderr) — interaktīvajos uzdevumos tās tiek ignorētas un ir domātas atkļūdošanai.