CSES - Datatähti 2018 alku - Ohjeet

Datatähden alkukilpailu muodostuu viidestä ohjelmointitehtävästä, jotka liittyvät algoritmien suunnitteluun. Tehtävissä A–D sinun tulee palauttaa koodi, joka lukee syötteen, ratkaisee ongelman ja tulostaa vastauksen. Tehtävässä E on erilainen palautustapa, joka on kuvattu tehtävänannossa.

Koodit arvostellaan automaattisesti niiden toimivuuden ja tehokkuuden perusteella. Kunkin tehtävän yhteydessä on ilmoitettu, paljonko aikaa ja muistia saat käyttää tehtävän ratkaisuun. Lisäksi osa tehtävistä jakautuu osatehtäviin, jotka on järjestetty helpoimmasta vaikeimpaan.

Kun lähetät koodin palvelimelle, sitä testataan joukolla syötteitä. Kukin osatehtävä arvostellaan erikseen niin, että saat pisteet osatehtävästä, jos koodisi läpäisee kaikki siihen kuuluvat testit. Voit lähettää samaan tehtävään useita koodeja, ja lopullinen pistemääräsi on korkein saamistasi pistemääristä.

Voit käyttää CSES:ssä monia ohjelmointikieliä. Huomaa kuitenkin, että kielten välillä on tehokkuuseroja eikä kaikilla kielillä ole välttämättä mahdollista ratkaista vaikeimpia osatehtäviä. Järjestäjillä on jokaiseen tehtävään täydet pisteet tuottava C++-ratkaisu, joka käyttää enintään 10 % sallitusta ajasta.

Esimerkkitehtävä

Tarkastellaan esimerkkinä seuraavaa tehtävää:

Sinulle annetaan kaksi kokonaislukua a ja b (1 \le a,b \le 100), ja tehtäväsi on laskea lukujen summa a+b. Syötteenä on yksi rivi, joka sisältää luvut a ja b, ja sinun tulee tulostaa yksi rivi, jossa on summa a+b.

Esimerkkisyöte:

4 7

Esimerkkituloste:

11

Tehtävän voi ratkaista esimerkiksi seuraavilla koodeilla:

C++:

#include <iostream>

using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    cout << a+b << "\n";
}

Java:

import java.util.*;

public class Summa {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a = input.nextInt();
        int b = input.nextInt();
        System.out.println(a+b);
    }
}

Python 2:

a, b = [int(x) for x in raw_input().split(" ")]
print a+b

Python 3:

a, b = [int(x) for x in input().split(" ")]
print(a+b)

Arvostelu

Kun lähetät koodin arvosteltavaksi, jokaisen syötteen tulos on yksi seuraavista:

  • ACCEPTED: Koodi tulosti oikean vastauksen.
  • WRONG ANSWER: Koodi tulosti väärän vastauksen.
  • TIME LIMIT EXCEEDED: Koodin suoritus kesti liian kauan.
  • OUTPUT LIMIT EXCEEDED: Koodi tuotti liikaa tulostetta.
  • RUNTIME ERROR: Virhe suorituksessa, esimerkiksi muisti loppui kesken tai koodi heitti käsittelemättömän poikkeuksen.

Saat pisteet osatehtävästä, jos jokaisen syötteen tulos on ACCEPTED. Muussa tapauksessa saat osatehtävästä 0 pistettä.

Kilpailun aikana et pääse näkemään syötteitä, joilla koodia testataan. Jos koodisi ei toimi, sinun täytyy yrittää keksiä itse syy tähän. Yleensä auttaa tutkia koodin toimintaa kattavasti erilaisilla syötteillä.

Teknistä tietoa

Koodin suurin sallittu koko on 128 kt.

Assembly-kääntäjä on NASM 2.10.09. Suoritusympäristö on 64-bittinen Linux.

C++-kääntäjä on g++ 4.8.4 ja kääntäjäliput ovat -std=c++0x -O2 -Wall.

Haskell-kääntäjä on GHC 7.6.3.

Java-kääntäjä on OpenJDK 1.8.0_101 (eli Java 8).

Node.js-versio on 0.10.25.

Pascal-kääntäjä on Free Pascal Compiler 2.6.2-8.

Python-tulkit ovat Python 2.7.6 ja Python 3.4.3.

Ruby-tulkin versio on 1.9.3p484.

Scala-kääntäjän versio on 2.11.6.

Kysymykset

Jos sinulla on kysyttävää kilpailusta, voit lähettää viestin CSES:n kautta tai sähköpostitse osoitteeseen info@datatahti.fi.