CSES - KILO 2017 3/5 - Ohjeet

Tehtävän ratkaiseminen

Jokaisessa kilpailutehtävässä on tarkoitus laatia ohjelma, joka lukee syötteen standardisyötteestä ja kirjoittaa tulosteen standarditulosteeseen. CSES tarkistaa automaattisesti ohjelman toimivuuden testaamalla sitä joukolla syötteitä.

Ohjelma ajetaan eristetyssä ympäristössä, eli esimerkiksi väliaikaistiedostojen tai verkkoyhteyden käyttö ei ole mahdollista. Ohjelma lopetetaan, mikäli se ylittää tehtävän aika- tai muistirajan.

Virhetilanteet

Tarkastettuaan lähettämäsi koodin, CSES kertoo, hyväksyttiinkö ratkaisu. Mikäli ratkaisua ei hyväksytty, ilmoitetaan myös syy hylkäämiselle. Syy on aina yksi seuraavista:

COMPILE ERROR: Ohjelman kääntäminen ei onnistunut. Lisätiedoissa näet kääntäjän virheilmoituksen.

OUTPUT LIMIT EXCEEDED: Ohjelma tuotti liikaa tulostetta.

TIME LIMIT EXCEEDED: Ohjelman suoritus kesti liian kauan.

RUNTIME ERROR: Ohjelma palautti nollasta poikkeavan palautusarvon (exit code). Tämä tulee esimerkiksi, jos muisti loppuu kesken tai koodi heittää käsittelemättömän poikkeuksen.

WRONG ANSWER: Ohjelma tuotti väärän vastauksen.

Virhe ilmoitetaan ensimmäisestä testitapauksesta, jossa ohjelma toimi väärin. Mikäli tässä testitapauksessa ohjelma tuottaa useamman virheen, niistä näytetään edellisen listan mukaan ensimmäinen.

Ohjelmointikielet

Jokainen kurssin tehtävä on mahdollista ratkaista ainakin C++:lla ja Javalla, mutta myös muita ohjelmointikieliä tuetaan. Huomaa, että voit kuitenkin joutua käyttämään alla olevia optimointeja syötteen ja tulosteen käsittelyyn.

Java

Käytettävä Java-jakelu on OpenJDK versio 1.8.0_144 (eli siis Java 8).

Nimeä kooditiedostosi Javan käytäntöjen mukaisesti, eli jos main-luokan nimi on Main niin uploadattavan tiedoston nimen tulee olla Main.java. Koodi ei saa olla missään pakkauksessa, tai muuten kääntö epäonnistuu.

Syötteeseen ja tulostukseen Javan Scanner-luokka ja komento System.out.println saattavat olla liian hitaita. Ajoympäristössä on käytössäsi nopeamman syötteen ja tulostuksen mahdollistava IO-luokka, jota ei tarvitse erikseen importata (IO.class on samassa hakemistossa ohjelman kanssa). IO-luokkaa käytetään seuraavasti:

public class Ratkaisu {
public static void main(String[] args) {
	IO io = new IO();
	
	String a = io.next(); // Lukee seuraavan välein erotellun merkkijonon.
	int b = io.nextInt(); // Lukee seuraavan välein erotellun int-kokonaisluvun.
	long c = io.nextLong(); // Lukee seuraavan välein erotellun long-kokonaisluvun.
	double d = io.nextDouble(); // Lukee seuraavan välein erotellun double-liukuluvun.
	
	// Toimii kuten System.out.println.
	io.println("Annoit syötteenä " + a + " " + b + " " + c + " " + d);
	
	io.close(); // TÄYTYY KUTSUA LOPUKSI, muuten tuloste voi jäädä kirjoittamatta
}
}

IO-luokan koodin löydät täältä: IO.java.

C++

C++ käännetään g++ 4.8.4-kääntäjällä. Kääntäjäliput ovat -std=c++0x -O2 -Wall.

C++:n cin ja cout voivat olla oletuksena liian hitaita, mutta niitä nopeuttaa huomattavasti, jos poistaa niiden synkronoinnin C:n stdio-kirjaston kanssa. Tämä tehdään lisäämällä rivi

cin.sync_with_stdio(false);

main-funktion alkuun:

#include <iostream>

using namespace std;

int main() {
	cin.sync_with_stdio(false);
	
	// ratkaise tehtävä tähän
}