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