CSES - Kirjastopohjaiset interaktiiviset tehtävät

Joissain kisoissa interaktiiviset tehtävät eivät toimi standardivirroilla, vaan kielen omien funktioiden kautta. IOI:ssa kaikki tehtävät, myös ei-interaktiiviset, ovat kirjastopohjaisia. Näissä tehtävissä et määrittele koodissasi main-funktiota ollenkaan, vaan sen tekee testauskoodi, joka kutsuu joitakin määrittelemiäsi funktioita.

Oman koodisi ja testauskoodin välinen rajapinta määritellään nk. header-tiedostossa. Kirjastohaku-tehtäväpohjassa tämä on tiedosto interface.hpp. Header-tiedoston tyypillinen pääte on h tai hpp. Tiedostossa listataan nimet ja tyypit sekä funktioille, jotka toteutat itse, että niille, jotka testauskoodi toteuttaa ja joita voit kutsua.

// Funktio, joka sinun tulee toteuttaa. Etsi ja palauta salainen luku.
long long search();

// Kysy, onko salainen luku pienempi kuin antamasi arvaus.
bool ask(long long);

Header-tiedosto sisällytetään koodiin include-direktiivillä, tosin <> sijaan kannattaa käyttää lainausmerkkejä "".

#include "interface.hpp"

Koodisi käännetään testikoodin kanssa samaan binääriin, tähän tapaan:

g++ -std=c++17 -O2 -Wall kirjastohaku.cpp test.cpp -o kirjastohaku

Komento löytyy yleensä valmiina jostakin skriptistä, kuten compile.sh. Se suoritetaan komennolla

./compile.sh

Jos saat virheen "bash: ./compile.sh: Permission denied", täytyy skriptille ensin lisätä suoritusoikeudet:

chmod +x compile.sh