Ú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

Kompletný zoznam verdiktov nájdete tu.

Limity

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::().expect("Failed to convert string to integer.");
}
Ďaľšie príklady nájdete tu.