Prihlásenie Registrácia  

Inštrukcie

Programovať môžeš v jazykoch Pascal, C/C++ alebo Java. Bližšie informácie o použitých kompilátoroch nájdeš na tejto stránke.

Ako má vyzerať riešenie v danom jazyku najjednoduchšie pochopíš, ak si pozrieš nejaké Správne riešenia tréningových úloh alebo úloh z Archívu starých súťaží. Napriek tomu tu dávame zopár dôležitých rád.

Ako písať dobré programy

  • Nepoužívaj funkcie špecifické len pre jeden systém (napr. Windows)
  • Nevypisuj texty pre užívateľov. Tvoj program má vypísať len to, čo je v zadaní.
  • Každý riadok výstupu musí byť ukončený znakom pre koniec riadku.
  • Riešenia v C musia končiť príkazom return 0.
  • Všetky vstupné hodnoty budú určite len v rozsahu určenom v zadaní. Nie je nutné ich kontrolovať.
  • Aj keby to nebolo zo zadania úplne jasné, celý vstup je potrebne čítať z ,,klávesnice'' (stdin) a vypisovať na ,,obrazovku'' (stdout). Ak sa vstup skladá z niekoľkých testovacích sád, nie je ich potrebné prečítať celé vopred! Výstup je možné vypisovať priebežne (typicky po každej testovacej sade).
  • Dávaj si pozor na veľkosti číselných dátových typov. Tu je ich zoznam:
    BitovRozsahFree PascalC/C++
    8-128..127shortintchar
    80..255byteunsigned char
    16-32768..32767smallintshort
    160..65535wordunsigned short
    32-2147483648..2147483647longintlong
    320..4294967295longwordunsigned long
    64-9223372036854775808..9223372036854775807int64long long
    640..18446744073709551615qwordunsigned long long
    Na našom systéme je navyše pre Free Pascal:
    • integer = smallint
    • cardinal = longword
    a pre C/C++:
    • int = long
    • unsigned int = unsigned long
  • Dávaj si pozor na prácu s typmi s plávajúcou desatinnou čiarkou. Odporúčame vždy používať aspoň 64 bitový typ. Nezabúdaj, že pri práci s týmito typmi sa počas výpočtu zaokrúhľuje. Nikdy preto rovnosť (a teda aj všetky ostatné porovnania, lebo napr. < okrem iného znamená, že nie je rovný) netestuj priamo (ani ručne, keby Ti vyšlo 2.99999999999999 nepovieš, že je to rôzne od 3, ak si počas výpočtu zaokrúhľoval). Tu je pre úplnosť zoznam:
    BitovVýznamných cifierNajvyšší exponentFree PascalC/C++
    32738singlefloat
    6415308doubledouble
    80194932extendedlong double
    Na našom systéme je navyše pre Free Pascal real = double.

Posielanie a testovanie riešenia

Najskôr je potrebné prejsť na stránku príslušnej súťaže. Aktuálne sa nachádzajú v menu Súťaže, tie, ktoré sú už uzavreté, sa nachádzajú v menu Archív. Testovacie príklady, ktoré sa nevyskytli na žiadnej súťaži, sa nachádzaju v menu Tréning. Po kliknutí na Úlohy sa zobrazí zoznam úloh, kde sa dajú riešenia posielať a pozerať výsledok testovania. Možné výsledky sa dajú pozrieť v pravidlách.

Pamäťové a časové limity

Pamäťové a časové limity vychádzajú zo skutočných a testovaných hôdnot. Náš vzorák si na všetkých vstupoch s danými limitmi vystačí. Časový limit je väčšinou dvojnásobkom času behu vzoráku na najväčšom vstupe. Ak Tvoj program nepracuje v danom časovom limite, skús ho zoptimalizovať, alebo vymyslieť efektívnejší algoritmus. Ak je v zadaní nejaký horný limit na velkosť vstupných údajov môžeš si byť skoro istý, že sa taký veľký vstup pri testovaní objaví. Pre väčšinu úloh, je pamäťový limit len teoretická horná hodnota. Mala by stačiť aj menej ako polovica z pridelenej pamäte.

Príklady

Špecifické príkazy:

Nesprávne:

uses crt;

begin
  ClrScr;
  {compute}
end.

Správne:

begin
  {compute}
end.

Zbytočné texty:

Nesprávne:

begin
  write('Vlozte nejaky text: ');
  readln(text);
  {compute}
  writeln('Vysledok je: ',sol);
end.

Správne:

begin
  readln(text);
  {compute}
  writeln(sol);
end.

Nové riadky:

Nesprávne:

begin
  readln(text);
  {compute}
  write(sol);
end.

Správne:

begin
  readln(text);
  {compute}
  writeln(sol);
end.

apríl 2024

PoUtStŠtPiSoNe
1234567
891011121314
15161718192021
22232425262728
2930     

máj 2024

PoUtStŠtPiSoNe
  12345
6789101112
13141516171819
20212223242526
2728293031