Pomoc Optil.io

Tu znajdziesz podstawowe informacje na temat używania OPTIL.io. Na następujących stroach znajdzież również infirmacje dotyczące:

Jeśli masz jakiekolwiek pytanie, na które nie ma odpowiedzi na tej stronie możesz zawsze skontaktować się z nami.

Przygotowanie problemów

OPTIL.io to platforma, na której rozwiązujesz problemy optymalizacyjne. Oznacza to, że musisz wdrożyć algorytm, który wybiera najlepsze rozwiązanie spośród wielu poprawnych rozwiązań. Każdy problem definiuje tak zwaną funkcję celową(?), która opisuje wartość, która powinna być zminimalizowana lub zmaksymalizowana, a Twoim zadaniem jest znalezienie rozwiązania, dla którego wartość funkcji jest jak największa lub jak najmniejsza. Na przykład spójrz na Problem Komiwojażera . W tym problemie musisz znaleźć plan podróży dla sprzedawcy, który odwiedza wszystkie dostępne miasta i jest tak krótki, jak to tylko możliwe. W innych słowach musisz znaleźć podróż o minimalnej długości.

Każdy problem opublikowany na tej platformie w opisie zawiera definicję funkcji celowej, którą należy zminimalizować lub zmaksymalizować, oraz opis formatu używanego do dostarczania danych wejściowych i oczekiwanego formatu danych wyjściowych. Na przykład spójrz na problem w samouczku. Musisz napisać program, który odczytuje jedną liczbę całkowitą i wyprowadza drugą. Twój program musi odczytać wszystkie dane wejściowe ze standardowego wejścia (tj. Klawiatury) i zapisać na standardowe wyjście (tj. Konsolę ekranową). Pamiętaj, że automatycznie sprawdzamy Twój program, dlatego bardzo ważne jest, aby nie można było drukować żadnego dodatkowego tekstu , który nie jest zdefiniowany w opisie problemu. Na przykład nie drukuj wiadomości informacyjnych, takich jak Twój wynik jest równy lub Wprowadź pierwszy numer .

Przykładowe rozwiązanie rozwiązujące prolem z samouczka zostało zaprezentowane poniżej. Więcej przykładów jak rozwiązać ten problem w innych językach programowania zostało zaprezentowanych na stronie przedstawiającej rozwiązania dla obsługi sygnałów.

#include <cstdio>

using namespace std;

int main()
{
  int n;
  scanf("%d", &n);
  printf("%d\n", n-1);
  return 0;
}

Problem z tutoriala jest bardzo prosty, aby umożliwić zaprezentowanie platformy. Bardzo łatwo jest znaleźć optymalne (maksymalne w tym przypadku) rozwiązanie. Jednak inne problemy są znacznie trudniejsze, a dla większości przypadków testowych nie można znaleźć optymalnego rozwiązania. Dlatego Twoje rozwiązanie otrzymuje punkty oparte na porównaniu z najlepszym rozwiązaniem przesłanym przez innych użytkowników, a nie najlepszym możliwym rozwiązaniem. Aby uzyskać szczegółowe informacje, zapoznaj się z opisem procedury oceniania. .

Zgłaszanie rozwiązań

Powinieneś przygotować rozwiązanie w którymkolwiek z obsługiwanych języków programowania. Następnie należy przesłać kod źródłowy skompilowany na serwerze i oceniony. Aby przesłać kod, skorzystaj z zakładki Prześlij, która jest dostępna na stronie z opisem problemu. Najprostszą metodą przesłania kodu jest wybranie pliku zawierającego go z dysku twardego. Możesz jednak wkleić go bezpośrednio do formularza zgłoszeniowego.

Przesłanie kodu jest znacznie łatwiejsze, jeśli cały kod znajduje się w jednym pliku. Jednak w razie potrzeby można podzielić go na kilka plików i przesłać w archiwum zawierającym plik CMake definiujący sposób budowania kodu. Powinieneś przesłać go jako archiwum w formacie TGZ (z rozszerzeniem .tgz). Upewnij się, że program wygeneruje plik wykonywalny o nazwie dokładnie takiej samej jak nazwa archiwum. Powinien zostać wygenerowany w katalogu głównym archiwum. Możesz także wysłać archiwum TGZ bez plików CMake ze statycznie skompilowanym plikiem binarnym, znajdującym się w katalogu głównym archiwum, z nazwą dokładnie taką samą jak nazwa archiwum. Na przykład plik binarny znajdujący się w solution.tgz powinien mieć nazwę solution . Jeśli chcesz przesłać archiwum z kilkoma plikami Pythona, wpisz solution.py.tgz , gdzie solution.py jest nazwą głównego pliku.

Po przesłaniu rozwiązania możesz sprawdzić status oceny na karcie Moje przebiegi na ekranie opisu problemu. Najważniejszymi kolumnami są status oceny i jej wyniki otrzymane dla wszystkich instancji testowych zdefiniowanych dla tego problemu.

Obsługa (?) limitu czasowego t

W przypadku większości problemów określono dwa ograniczenia czasowe. Po pierwszym, krótszym czasie Twoje rozwiązanie otrzymuje sygnał SIGTERM Linux i ma możliwość wyprowadzenia najlepszego znalezionego rozwiązania. Po nieco dłuższym czasie odbiera sygnał SIGKILL, zostaje zakończony przez system operacyjny i odbiera sygnał przekroczenia limitu czasu. Łapanie sygnału SIGTERM jest preferowaną metodą sprawdzania limitu czasu, ponieważ jest niezależny od metody pomiaru czasu. W przypadku niektórych prostych zadań, gdy limit czasu wynosi kilka sekund, może się zdarzyć, że SIGTERM nie zostanie wysłany przed SIGKILL. Informacje na temat takiego przypadku znajdują się w opisie procedury oceniania w opisie problemu.

Przykłady jak obsługiwać program SIGTERM można znaleźć w kilku popularnych językach programowaniahere.

Status zgłoszenia

Każde rozwiązanie problemu jest oceniane na podstawie pewnego zestawu przypadków testowych. Dla każdego przypadku testowego może otrzymać jeden ze stanów opisanych poniżej. Każde rozwiązanie również otrzymuje zagregowany status.

Accepted

Najbardziej porządany status. Jeśli go otrzymasz, oznacza to, że twoje rozwiązanie zostało rozwiązało przypadek testowy poprawnie. Jednak nie musi to być najlepsze możliwe rozwiązanie. Jakość twojego rozwiązania jest przedstawiona za pomocą wartości wyniku, który jest opisany dla każdego problemu osobno w opisie problemu w sekcji punktacji.

Time Limit Exceeded

Każdy problem ma zdefiniowany limit czasowy (równy dla każdego przypadku testowego). Jeśli twój program otrzymuje ten status, oznacza to, że w niektórych przypadkach testowych wykonywał się dłużej niż pozwala limit czasu. Powinieneś zmniejszyć złożoność obliczeniową twojego programu. Limit czasu jes opisany w opisie problemu w sekcji punktacji.

Memory Limit Exceeded

Ten status oznacza, że twój program zużywa dużo pamięci i przekroczył swój limit. Bardzo rzadko może się zdarzyć, że jeśli program bardzo szybko przydzieli pamięć otrzyma błąd Runtime Error zamiast Memory Limit Exceeded.

Output Limit Exceeded

Twój kod wygenerował zbyt długie wyście. Ten status zwykle oznacza, że twój algorytm ma nieskończoną pętlę, która w dalszym ciągu wyprowadza jakiś tekst. Czasami jednak możesz uzyskać ten status, gdy niepoprawnie rozwiązujesz problem i z tego powodu wypisujesz za dużo danych.

Processes Limit Exceeded

Twój kod tworzy dodatkowe procesy. Nie wolno ci tego robić!

Runtime Error

Ten status oznacza, że twoja odpowiedź jest niepoprawna. Przeczytaj uważnie opis formatu, który powinien zostać użyty do wyprowadzenia rozwiązania i sprawdź opis problemu, aby upewnić się, że rozumiesz go poprawnie.

Wrong Answer

Ten status oznacza, że twoja odpowiedź jest niepoprawna. Przeczytaj uważnie opis formatu, który powinien zostać użyty do wyprowadzenia rozwiązania i sprawdź opis problemu, aby upewnić się, że rozumiesz go poprawnie.

Punktacja

Każde rozwiązanie jest oceniane za pomocą zestawu testowych przypadków. Zwykle istnieje od 10 do 100 przypadków testowych, a przesłane rozwiązanie jest oceniane przy użyciu każdego z nich. Procedura punktowania jest zdefiniowana specjalnie dla każdego problemu i jest opisana w opisie problemu w sekcji punktacji. Na podstawie wyników otrzymanych w każdym przypadku testowym oblicza się łączny wynik całkowity. Dla każdego przypadku testowego najlepsze rozwiązanie spośród wszystkich zgłoszonych otrzymuje 100 punktów podzielone przez liczbę przypadków testowych. Najgorsze rozwiązanie otrzymuje 0 punktów i wszystkie inne ilość proporcjonalną do najlepszego i najgorszego rozwiązania. Wreszcie przyznane punkty dla każdego przypadku testowego sumuje się, aby uzyskać całkowity wynik. Uważaj, używając tej punktacji procedura Twój wynik może się zmienić w czasie, gdy ktoś złoży nowe rozwiązanie.

Podsumowanie

Na koniec warto przytoczyć motto przedstawione na stronie internetowej sędziego Timus zwane pierwszym prawem sędziów online: Dla każdego problemu istnieje rozwiązanie, które jest proste, szybkie i błędne. Życzymy wszystki użytkownikom platformy OPTIL.io unikania takich rozwiązań tak często jak to jest możliwe.