Potyczki Algorytmiczne
Otwarty ogólnopolski konkurs programistyczny 2016
 
Google
partner
Atende
sponsor
Uniwerytet Warszawski
organizator
liczba uczestników
0
Ustalenia techniczne

Można założyć, że:

  • dane wejściowe są poprawne,

  • programy będą uruchamiane w systemie operacyjnym Linux, na komputerze z procesorem 32-bitowym (dla zadań zwykłych) lub 64-bitowym (dla zadań rozproszonych).

Rozwiązania zadań mogą:

  • korzystać z biblioteki matematycznej (tylko w przypadku C/C++),

  • korzystać z biblioteki STL (dla C++),

  • wypisywać na standardowe wyjście diagnostyczne stderr (komunikaty
    wypisane w ten sposób są ignorowane przez system sprawdzający; należy
    jednak pamiętać, że takie wypisywanie zużywa czas procesora, tak jak każda inna instrukcja); w zadaniach rozproszonych na standardowe wyjście diagnostyczne można wypisać co najwyżej 1MB danych.

Rozwiązania zadań muszą:

  • kończyć się kodem wyjścia równym 0. Każdy inny kod zakończenia programu jest równoznaczny błędowi wykonania.

  • być zapisane w pojedynczych plikach z rozszerzeniem c, cpp, java lub pas. Rozszerzenie powinno odpowiadać wybranemu językowi programowania:

    • .c dla języka C,

    • .cpp dla języka C++,

    • .java dla języka Java (nie dotyczy zadań rozproszonych),

    • .pas dla języka Pascal (nie dotyczy zadań rozproszonych).

  • zawierać publiczną klasę o nazwie takiej, jak trzyliterowy skrót nazwy zadania, podany w treści, zapisany małymi literami (dotyczy rozwiązań w Javie, dla zadań zwykłych). Klasa ta powinna implementować metodę main.
  • używać dostarczonej przez organizatora biblioteki do komunikacji pomiędzy instancjami programu (w zadaniach rozproszonych).

Rozwiązania zadań nie mogą:

  • tworzyć nowych procesów czy wątków,

  • uruchamiać innych programów,

  • korzystać z zewnętrznych bibliotek (oprócz biblioteki matematycznej dla C/C++), np. crt, graph itp., o ile w treści zadania wyraźnie nie zaznaczono inaczej; dotyczy to również bibliotek dołączanych przez opcje kompilatora,

  • zawierać wstawek w Assemblerze (w C/C++),

  • używać funkcji sieciowych (np. socket, send, itp); w wypadku zadań rozproszonych do komunikacji między instancjami wolno wykorzystywać wyłącznie dostarczoną przez organizatora bibliotekę,

  • otwierać plików, w szczególności zabronione jest tworzenie plików tymczasowych,

  • wykorzystywać większej ilości pamięci niż podano w treści zadania,

  • naruszać bezpieczeństwa systemowego,

  • oczekiwać na interakcję użytkownika,

  • w przypadku zadań rozproszonych - wypisywać więcej niż 1MB danych na standardowe wyjście (zwykłe lub diagnostyczne).

Ograniczenia:

  • kod źródłowy rozwiązania nie powinien przekraczać 100 KB, a kod wykonywalny 10 MB dla zadań zwykłych i 4MB dla zadań rozproszonych,

  • czas kompilacji rozwiązania nie powinien przekraczać 30 s dla zadań zwykłych i 10 s dla zadań rozproszonych,

  • wielkość pamięci operacyjnej dostępnej programom będzie podana w treści zadań (jednak ta wartość dotyczy sumarycznego zapotrzebowania na pamięć, a więc zawiera m.in. rozmiar kodu wykonywalnego, stosu, sterty itp.).

Kompilowanie rozwiązań

Nadesłane rozwiązania będą kompilowane na systemie Linux, 32-bitowym w przypadku zadań zwykłych i 64-bitowym w przypadku rozproszonych.

Język Wersja kompilatora

Polecenie kompilacji

C gcc 4.8.2 gcc -static -O2 -s abc.c -lm
C (rozproszone) gcc 4.7.2 gcc -std=c99 -static -O2 abc.c -lm
C++ gcc 4.8.2 g++ -std=c++11 -static -O2 -s abc.cpp -lm
C++ (rozproszone) gcc 4.7.2 g++ -std=gnu++0x -static -O2 abc.cpp -lm
Pascal fpc 2.6.2-8 ppc386 -O2 -XS -Xt abc.pas
Java Java SE 8u31 javac abc.java
jar cf abc.jar *.class

Polecenie kompilacji może różnić się od tego w powyższej tabeli, jeżeli w treści zadania wyraźnie zaznaczono inaczej.

Rozwiązania napisane w języku Java będą uruchamiane w systemie Linux przy użyciu maszyny wirtualnej Java SE 8u31 następującym poleceniem:

java -Xmx<limit pamięci> -Xms<limit pamięci> -Xss<limit pamięci> -classpath abc.jar abc


Użyty język programowania jest rozpoznawany na podstawie rozszerzenia pliku. Nie jest możliwy inny sposób kompilacji (np. przy pomocy plików Makefile). Programy, które nie będą kompilować się w podany powyżej sposób, zdobędą zero punktów.

Finał

Podczas finału zawodnicy będą rozwiązywać zadania na dostarczonych przez organizatorów komputerach. Jedynym systemem operacyjnym dostępnym na tych komputerach będzie Linux. W trakcie zawodów zabronione jest korzystanie z Internetu, a także przyniesionych ze sobą książek, notatek, wydruków, telefonów komórkowych, laptopów oraz innych źródeł, które mogłyby zakłócić uczciwy przebieg zawodów.