Program má čítať zo štandardného vstupu (stdin, resp. input, inak povedané klávesnice v konzole), písať na štandardný výstup (stdout, resp. output, inak povedané obrazovku). Výstup musí dodržiavať formát uvedený v zadaní. A za každým riadkom na výstupe musí byť znak nového riadku (v C++ '\n', v Pascale/Jave/C# použite writeln/println/WriteLine). Vo svojom riešení sa nemusíš zaoberať kontrolovaním správnosti vstupných údajov. Súbor sa môže volať ľubovoľne, pri submitovaní je vždy jasné, ktorú úlohu submituješ.

Počas behu sa musí tvoje riešenie správať slušne. Zakázaný je akýkoľvek prístup k súborovému systému (na vstup a výstup sa používa štandardný vstup a výstup), prístup do pamäte testovača, snaha akýmkoľvek spôsobom narušiť jeho fungovanie a všetky podobné aktivity. Explicitne je zakázané používať viac ako 1 thread, t. j. volať fork() a podobné.

Operačný systém a kompilátory na počítači, ktorý testuje riešenia

Vaše riešenia testujeme pod Debian Linuxom, na počítači, ktorý je vybavený 64bitovým procesorom (z toho napríklad vyplýva, že v C++ má premenná long veľkosť 64 bitov). Pre jazyky používame kompilátory s nasledovnými nastaveniami:

  • C: gcc -static -O2 -lm riesenie.c
  • C++: g++ -static -O2 -std=gnu++11 riesenie.cc
  • Pascal: fpc -Sg -O2 riesenie.pas
  • Java: javac riesenie.java
  • C#/Mono: mcs riesenie.cs

Z týchto nastavení vyplýva napr., že v C++ podporujeme novinky zo štandardu C++11 a že kód optimalizujeme, teda tvoj kód v C/C++/Pascal-e môže u nás v niektorých prípadoch bežať o dosť rýchlejšie ako u teba. Používame tieto verzie kompilátorov:

  • C/C++: GCC 4.7.2
  • Pascal: freepascal 2.6.0
  • Java: openjdk 1.7.0_03
  • C#: mono 2.10.8.1
  • Python: python 3.8.0
  • Haskell: ghc 7.4.1

Príklady korektných programov

Ako riešenie úlohy "na vstupe je zopár malých celých čísel, spočítajte ich a vypíšte ich súčet" by sme uznali napr. nasledujúce programy:

C

#include <stdio.h>

int main(void) {
  int x, TOTAL=0;
  while (scanf("%d",&x)==1) TOTAL += x;
  printf("%d\n",TOTAL);
  return 0;
}

C++

#include <iostream>
using namespace std;

int main(void) {
  int x, TOTAL=0;
  while (cin >> x) TOTAL += x;
  cout << TOTAL << endl;
  return 0;
}

Pascal

var x, TOTAL : longint;

begin
   TOTAL := 0;
   while not eof do begin
      readln(x);
      TOTAL := TOTAL + x;
   end;
   writeln(TOTAL);
end.

Java

Tvoj kód musí byť vo vnútri neverejnej Class (nesmie byť public) a nesmie sa nachádzať v žiadnom package

import java.io.*;
import java.util.*;

class WholeProgram {
  public static void main(String args[])   {
    String Line;
    int TOTAL = 0;
    try     {
      BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
      while (true) {
        Line = stdin.readLine();
        if (Line == null) break;
        StringTokenizer st = new StringTokenizer(Line);
        int x = Integer.parseInt(st.nextToken());
        TOTAL += x;
      }
    }
    catch (EOFException e) { }
    catch (IOException e) { }
    System.out.println(TOTAL);
  }
}

C#/Mono

using System;

class MojeRiesenie {
  public static void Main() {
    int TOTAL = 0;
    while (true) {
      string Line = Console.ReadLine();
      if (Line == null) break;
      TOTAL += int.Parse( Line );
    }
    Console.WriteLine("{0}", TOTAL);
  }
}

Python

a = int(input())
b = int(input())
print( a+b )

Haskell

Funkcia, ktorú máme spustiť, sa musí volať main

main :: IO ()
main = do
  a <- getLine
  b <- getLine
  print (sucet (read a) (read b))

Tento článok bol naposledy zmenený: 16. september 2023 8:25