Teknisiä ohjeita

Takaisin

Tehtävissä ohjelman on annettava oikea tuloste standarditulosteeseen standardisyötteestä annetulle syötteelle. Lisäksi tulee noudattaa tehtävässä annettuja aika- ja muistirajoja. CSES:n Submissions-sivulla kerrotaan jokaisen lähetyksen tulos, joka on yksi seuraavista:

Ohjelmointikielet

Voit käyttää seuraavia ohjelmointikieliä:

CSES-nimiNimiKääntäjäLiput
c++C++11g++ 4.8.2-std=gnu++0x -Wall -O2
javaJava 7OpenJDK javac 1.7.0_65

C++ ajetaan ympäristössä, jossa muut kuin standardisyötteeseen ja -tulosteeseen tarvittavat syscallit on estetty. Java ajetaan tyhjällä security policylla. Molempien hiekkalaatikoiden rikkominen johtaa RUNTIME ERRORiin.

C++:ssa muistiraja toteutetaan komennolla ulimit -v 150000, ja pinon kokorajoitus on poistettu komennolla ulimit -s unlimited. Javassa muistirajat annetaan lipuilla -Xmx150m -Xss16m.

Huomaa, että voit lähettää myös C-koodia käännettäväksi C++-koodina.

Syöte ja tuloste C++:lla

C++:n cin ja cout nopeutuvat huomattavasti, kun poistaa niiden synkkauksen C:n stdio-kirjaston kanssa lisäämällä main-funktion alkuun rivin cin.sync_with_stdio(false). Joissain tehtävissä aikaraja saattaa ylittyä, jos näin ei tee.

#include <iostream>

using namespace std;

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

Syöte ja tuloste Javalla

Javan Scanner ja System.out.print ovat myös liian hitaita moniin tehtäviin, joten kannattaa syötteeseen ja tulostukseen käyttää seuraavan esimerkin IO-luokkaa. Ratkaisu pitää palauttaa yhdessä tiedostossa, joten lisää IO-luokka tiedoston loppuun.
import java.util.*;
import java.io.*;

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, muuten tuloste voi jäädä kirjoittamatta
}
}

class IO extends PrintWriter {
	private BufferedReader r;
	private StringTokenizer s;
	
	public IO() {
		super(new BufferedOutputStream(System.out));
		r = new BufferedReader(new InputStreamReader(System.in));
	}
	
	public String nextLine() {
		String s = null;
		try {
			s = r.readLine();
		} catch (Exception e) {}
		if(s == null) throw new NoSuchElementException();
		return s;
	}
	
	public String next() {
		while (s == null || !s.hasMoreElements()) {
			s = new StringTokenizer(nextLine());
		}
		return s.nextToken();
	}
	
	public int nextInt() {
		return Integer.parseInt(next());
	}
	
	public long nextLong() {
		return Long.parseLong(next());
	}
	
	public double nextDouble() {
		return Double.parseDouble(next());
	}
}