Ustalenia techniczne XXV OI

Do kompilowania rozwiązań używane będą następujące kompilatory:

  • Pascal – Free Pascal Compiler 2.6.2
  • C/C++ – GCC 4.8

Polecenia używane do kompilacji rozwiązań (np. zadania abc):

  • Dla c – gcc -O2 -static abc.c -lm -std=gnu99
  • Dla cpp – g++ -O2 -static abc.cpp -lm -std=c++11
  • Dla pas – ppc386 -O2 -XS -Xt abc.pas

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, nie podlegają ocenie.

Ograniczenia:

  • kod źródłowy rozwiązania nie może przekraczać 100 KB, a kod wykonywalny 10 MB,
  • czas kompilacji rozwiązania nie może przekraczać 30 s,
  • 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.).

Rozwiązania powinny:

  • składać się z jednego pliku źródłowego o nazwie podanej w treści zadania,
  • czytać dane ze standardowego wejścia, zapisywać wynik na standardowe wyjście, chyba że dla danego zadania wyraźnie napisano inaczej,
  • kończyć działanie kodem wyjścia 0 – każdy inny kod zakończenia programu jest równoważny błędowi wykonania,
  • zakładać, że są wykonywane na procesorze 32-bitowym (w szczególności, że typ int w C/C++ jest 32-bitowy, a typ Integer w Pascalu jest 16-bitowy).

Rozwiązania mogą:

  • korzystać z biblioteki standardowej (tylko w przypadku C++),
  • być napisane w standardzie C++11,
  • 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 cenny czas).

Rozwiązania nie mogą:

  • otwierać jakichkolwiek plików (w szczególności zabronione jest tworzenie plików tymczasowych),
  • tworzyć nowych procesów czy wątków,
  • korzystać z funkcji sieciowych (np. socket, send itp.),
  • naruszać bezpieczeństwa systemowego,
  • oczekiwać na interakcję użytkownika,
  • uruchamiać innych programów,
  • korzystać z zewnętrznych bibliotek (oprócz dozwolonych bibliotek dla C/C++), np. crt, graph itp., chyba że treść zadania wskazuje inaczej. Dotyczy to również bibliotek dołączanych przez opcje kompilatora.

Rozwiązania w języku C/C++:

  • nie powinny używać plików nagłówkowych typowych dla środowiska DOS/Windows, np. conio.h czy windows.h,
  • nie powinny używać niestandardowych argumentów do funkcji printf, takich jak %D czy %F,
  • w przypadku korzystania tylko z wejścia/wyjścia strumieniowego (iostream) radzimy na początku programu wykonywać instrukcje:
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    oraz wypisywać końce linii jako "\n" (a nie endl). Służy to zwiększeniu efektywności operacji wejścia/wyjścia.
© Anna Michalska
Uniwersytet Warszawski