Ú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 servri. Odovzdaniu riešenia sa hovorí submit.

Kompilátory:

Na testovači používame Linux a sú na ňom nasledovné verzie kompilátorov:

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 používania Delphi alebo iných pokročilejší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. To sa týka aj knižníc v iných jazykoch, napríklad conio.h v jazyku C. Rovnako treba odstrániť napríklad prípadnú kompilátorovú direktívu {$R *.res} v Delphi a podobne. 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). Ak má súbor koncovku pas,c,cc,cpp,java,py,js,cs,rs, potom testovač sám určil programovací jazyk. Ak programujete v Delphi, Lazaruse alebo inom Pascalovskom editore, treba odovzdať .pas alebo .dpr súbor.

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

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.

Upozornenia pre Pascalistov

Existuje viacero dialektov Pascalu, náš testovač používa FreePascal. V prípade, že váš program na vašom počítači funguje a na testovači dostávate výsledok Wrong Answer, zamyslite sa napríklad nad rozsahom premenných, ktoré používate. FreePascal môže mať troška inak definované typy ako tie, ktoré používate v Delphi, Turbo Pascale alebo Borland Pascale. Typ longint by mal byť ten správny. V niektorých úlohách môže byť vyžadované použiť 64-bitový celočíselný dátový typ.

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;
}

Pascal

var a,b : longint;
begin
   readln(a);
   readln(b);
   writeln(a+b);
end.

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 čí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.");
}