Úlohy:
Pre každú súťažnú úlohu je potrebné naprogramovať samostatný program. Úlohy budú odovzdávané, testované a vyhodnocované úplne osobitne. Odovzdáva sa zdrojový kód, kompilovanie a spúšťanie programu sa vykonáva na našom serveri. Odovzdaniu riešenia sa hovorí submit.
Jazyky:
Zoznam podporovaných jazykov nájdete tu. Aktuálne používanú verziu jazyka sa dozviete v protokole testovania - odporúčame si skúsiť pred súťažou odovzdať riešenie niektorej úlohy v jazyku, v ktorom chcete robiť, a overiť si jeho kompiláciu a aktuálnu verziu. Verzie jazykov a kompilátorov sa snažíme udržiavať aktuálne.
Vstup a výstup
Programy musia čítať vstup zo štandardného vstupu (klávesnice) a písať výstup na štandardný výstup (obrazovku). Programy nesmú otvárať žiadne súbory. V prípade niektorých vývojových prostredí, treba programovať konzolovú aplikáciu (alebo niečo ekvivalentné), a pred odovzdaním riešenia odstrániť prípadné neštandardné knižnice, používané týmto vývojovým prostredím, napríklad conio.h v jazyku C. Ak máte nejasnosti, spýtajte sa organizátorov. Je žiadúce si skúsiť pred súťažou cvične vyriešiť niektorú z prístupných úloh.
Odovzdávanie riešení
Riešenie môžete odovzdať použitím formulára na konci jeho zadania (ku ktorému sa doklikáte v záložke Úlohy). Programovací jazyk určí testovač automaticky podľa koncovky súboru.
Po odovzdaní sa súbor na testovači skúsi skompilovať príslušným kompilátorom. V prípade, že sa váš program podarí úspešne skompilovať, testovač ho spustí na vzorových vstupoch, ktoré nájdete v zadaní a niekoľkých ďaľších vstupoch. Výsledok tohto testu sa vám v testovači po krátkej dobe sprístupní. Z tohto výsledku môžete zistiť, či správne načítavate vstup a či správne vypisujete výstup. Testuje sa na rovnosť vášho výstupu so vzorovým znak po znaku (pokiaľ zadanie vyslovene netvrdí opak)! To znamená, že musíte dodržať presne formát výstupu, nesmiete mať vo výstupe medzery ani žiadne iné znaky navyše a váš výstup musí končiť práve jedným znakom newline (viď vzorový výstup).
To, že váš program nevyrieši úspešne niektorý/é z príkladov, neznamená, že nemôže dostať žiadne body. Odovzdať úlohu môžete ľubovoľne veľa krát. Hodnotený bude najlepší odovzdaný program pred koncom súťaže. V prípade rovnosti bodov rozhoduje o poradí to, kto skôr nadobudol posledné body.
Niektoré vstupy sú usporiadané do sád. Ak sa vstupy volajú napríklad 01.a.in, 01.b.in, ... 01.k.in, potom tvoria jednu sadu a body za ňu dostanete, len keď je celá sada správne vyriešená.
Možné odpovede testovača
- OK - odpoveď, ktorú chcete vidieť a ktorú netreba komentovať :)
- Time Limit Exceeded (TLE) - váš program neskončil v požadovanom časovom limite
- Runtime Exception (EXC) - váš program počas behu spadol, alebo si vypýtal príliš veľa pamäte
- Wrong Answer (WA) - výstup vášho programu sa nezhoduje znak po znak so správnym výstupom (v prípade úlohy, kde je možných viacero odpovedí výstup vášho programu nespĺňa podmienky zadania)
- Ignored (IGN) - váš program nemal výsledok OK na niektorom vstupe zo sady. Keďže za túto sadu už body nedostanete, pre ušetrenie času sa ďalšie vstupy z tej istej sady testovať nebudú.
Limity
- Časový limit je zvyčajne (ale nie vždy) približne 3 až 4 násobok času, ktorý potrebuje vzorové riešenie na najväčšom vstupe. Časový limit sa zvyčajne meria len pre Python a C++. Ostatné jazyky majú väčšinou rovnaký limit ako C++.
- Pamäťový limit: 1 GB.
- Limit na veľkosť programu: 100 kB
Ako správne písať programy v Jave
Testovanie Javy je trochu komplikovanejšie, keďže pri kompilácii súbory premenúvame.
Aby všetko fungovalo ako má,
zdroják musí obsahovať práve jednu vonkajšiu classu
a táto classa nesmie byť public.
(Teda, môže byť public, ale musí sa volať presne rovnako ako úloha: ak má úloha
krátke meno zenit25ska, my si tvoj program pomenujeme zenit25ska.java.)
Spustená bude metóda main dotyčnej vonkajšej classy. (Vovnútri vonkajšej classy môžete deklarovať iné classy, ak chcete/potrebujete.)
Ďalej, zdrojový kód v Jave nesmie byť deklarovaný ako súčasť nejakého package.
Pozor, Java je pomerne pomalý a ťažkopádny jazyk. Môže sa stať, že nešikovne napísaný program s dobrou myšlienkou (a vo veľmi ojedinelých prípadoch aj šikovne napísaný) nestihne vyriešiť najväčšie vstupy v časovom limite. Ako príklad slúži načítavanie a vypisovanie. Pokiaľ potrebujete veľa načítavať, resp. vypisovať, je odporúčané použiť BufferedReader, resp. BufferedWriter.
Príklady správnych programov:
C++
#include <iostream> using namespace std; int main() { int a,b; cin >> a; cin >> b; cout << (a+b) << endl; return 0; }
C
#include <stdio.h> int main() { int a,b; scanf("%d %d",&a,&b); printf("%d\n",a+b); return 0; }
Java
import java.io.*; class MySolution { public static void main(String [] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int a = Integer.parseInt( in.readLine() ); int b = Integer.parseInt( in.readLine() ); System.out.println("" + (a+b)); } }
JavaScript
var fs = require('fs'); var whole_input = fs.readFileSync('/dev/stdin').toString(); var input_lines = whole_input.split('\n'); var a = parseInt(input_lines[0]); var b = parseInt(input_lines[1]); console.log( a + b );
Python
Súčet dvoch čísel, každé v novom riadku:a = int(input()) b = int(input()) print(a + b)Súčet ľubovoľne veľa čísel, všetky v tom istom riadku:
cisla = [ int(x) for x in input().split() ] print( sum(cisla) )
Rust
use std::io::stdin; fn main() { let a = stdin_int32(); let b = stdin_int32(); println!("{}", a + b); } fn stdin_int32 () -> i32 { let mut input_temp = String::new(); stdin().read_line(&mut input_temp).expect("Failed to read line"); return input_temp.trim().parse::Ďaľšie príklady nájdete tu.().expect("Failed to convert string to integer."); }