13.09.2019

Test z informatyki w I etapie XIII Ogólnopolskiej Olimpiady „O Diamentowy Indeks AGH”


1. W terminie podanym w harmonogramie uczestnicy mają możliwość wprowadzenia rozwiązań zadań konkursowych. Wprowadzanie rozwiązań odbywa się przez platformę OIOIOI dostępną przez przeglądarkę internetową, po uprzednim zalogowaniu się systemu DIAMENT  (login i hasło ustalone przy rejestracji). Gdzie będzie dostępny link do systemu OIOIOI. W systemie znajdują się również tematy poszczególnych zadań.

2. Ocena rozwiązań

a) 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.

b) 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.

c) Rozwiązania sprawdzane są w sposób automatyczny, na przygotowanych uprzednio przez autorów zadań przypadkach testowych.

d) 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.

e) 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.

f) 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.

g) 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)

h) 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.

3. Ustalenia techniczne

a) 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.

b) 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.

c) 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++ w wersji 4.8.2 (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.

d) Czas kompilacji rozwiązania nie może przekroczyć 30 sekund, a wielkość wynikowego pliku wykonywalnego nie może przekroczyć 10 MB.

e) Skompilowany program będzie uruchamiany w środowisku 32-bitowym.

f) 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).