Czas trwania Olimpiady z przedmiotu Informatyka: 2 godziny zegarowe
Stanowisko pracy
- W trakcie zawodów zawodnik będzie dysponował losowo przydzielonym stanowiskiem komputerowym, pracującym zdalnie pod kontrolą 64-bitowego systemu Linux (dystrybucja CentOS ze środowiskiem graficznym GNOME Classic).
- Stanowisko zawodnika będzie pozbawione dostępu do sieci zewnętrznej, za wyjątkiem automatycznego systemu sprawdzającego (Dostęp do systemu sprawdzającego odbywa się z wykorzystaniem przeglądarki internetowej).
- Na stanowisku zawodnika będą dostępne następujące zasoby:
- Kompilatory: gcc i g++,
- Edytory tekstu: nano, mcedit, gedit, vim, emacs,
- Środowiska programistyczne: geany, codeblocks,
- Debuggery: gdb, ddd,
- Profilery: valgrind, gprof,
- Przeglądarki internetowe: firefox,
- Dokumentacja: standardowa pomoc wszystkich zainstalowanych programów oraz lokalna kopia zawartości strony cppreference.com.
Ocena rozwiązań
- Jedynymi kryteriami oceny rozwiązań zadań są:
- poprawność wyników,
- efektywność działania (czas wykonania),
- nie podlegają zatem ocenie kwestie takie jak formatowanie kodu, nazewnictwo, funkcji i zmiennych czy też stosowanie/niestosowanie komentarzy.
- Nie ma potrzeby weryfikowania prawidłowości danych wejściowych i ich zgodności ze specyfikacją w treści zadania – należy przyjąć, że dostarczone do programu dane wejściowe są poprawne.
- Rozwiązania sprawdzane są w sposób automatyczny, na przygotowanych uprzednio przez autorów zadań przypadkach testowych.
- Należy ściśle trzymać się formatu wyników podanego w treści zadania. Jakiekolwiek odstępstwa mogą doprowadzić do uznania udzielonej odpowiedzi za błędną. Dopuszczalnym odstępstwem są nadmiarowe białe znaki na końcach linii – chyba, że treść zadania stanowi inaczej. W szczególności nie wolno wyświetlać na ekranie dodatkowych komunikatów „wchodzących” w interakcję z użytkownikiem (np. Podaj liczbę, Wynik wynosi …) będą one bowiem traktowane jako część odpowiedzi, niewystępująca w oczekiwanej odpowiedzi programu.
- Bezpośrednio po przesłaniu rozwiązania do systemu, jest ono kompilowane i uruchamiane na zestawie jednego lub więcej niepunktowanych testów przykładowych (wstępnych). Raport wstępnej oceny jest udostępniany uczestnikowi w systemie niezwłocznie po zakończeniu sprawdzania; nie przesądza ono o poprawności i kompletności rozwiązania.
- Podstawą oceny rozwiązań są testy ostateczne. Szczegółowo weryfikują one prawidłowe zinterpretowanie treści zadania, uwzględnienie wszystkich niezbędnych przypadków (w tym przypadków brzegowych) i dobór optymalnego algorytmu dla rozwiązania problemu. Raport z oceny na testach ostatecznych nie jest widoczny dla uczestnika.
- Pomiar czasu wykonania realizowany jest w sposób deterministyczny, z wykorzystaniem sprzętowych liczników zdarzeń procesora – zliczane są wykonane w czasie działania programu instrukcje procesora. Przyjmuje się, że czas wykonania dowolnego jednostkowego rozkazu procesora jest stały, niezależny od rodzaju wykonywanej instrukcji. Na potrzeby prezentacji czasu przyjmuje się, że modelowany procesor wykonuje dokładnie 2 miliardy operacji na sekundę (2 GHz).
- Rozwiązanie dla każdego z zadań można zgłosić maksymalnie 10 razy. Podstawą oceny jest zawsze ostatnie przesłane do systemu, które nie zakończyło się błędem kompilacji – nawet w sytuacji gdy któreś z wcześniejszych uzyskałoby wyższy wynik
Ustalenia techniczne
- Jedynymi dopuszczalnymi interakcjami rozwiązania ze środowiskiem systemu i światem zewnętrznym są odczyt danych wejściowych ze standardowego wejścia (scanf, cin) i zapis wyników na standardowe wyjście (printf, cout). Rozwiązania naruszające powyższe ograniczenie (np. otwierające i tworzące nowe pliki, komunikujące się z siecią, uruchamiające nowe wątki i procesy) otrzymają 0 pkt.
- Zgłaszane do oceny rozwiązanie zadania musi składać się z dokładnie jednego pliku źródłowego o rozmiarze nie większym niż 100 kB.
- Jedyne dopuszczalne języki rozwiązań to C i C++. Zgłaszane rozwiązania będą kompilowane przy użyciu kompilatorów gcc i g++ (obsługującej C++11) następującymi poleceniami:
- Dla rozwiązań w języku C:
- gcc -std=gnu99 -static -O2 -s -lm rozw.c
- Dla rozwiązań w języku C++:
- g++ -std=c++11 -static -O2 -s -lm rozw.cpp
- Rozwiązania, które nie skompilują się w opisany powyżej sposób, otrzymają 0 pkt.
- Czas kompilacji rozwiązania nie może przekroczyć 30 sekund, a wielkość wynikowego pliku wykonywalnego nie może przekroczyć 10 MB.
- Skompilowany program będzie uruchamiany w środowisku 32-bitowym.
- Program musi bezwzględnie kończyć się kodem wyjścia 0 (return 0; w funkcji int main()). Każdy inny kod wyjścia będzie interpretowany jako błąd wykonania i poskutkuje otrzymaniem 0 pkt. (nawet jeśli program wypisał wcześniej prawidłowe wyniki).