W tym roku po raz dziesiąty odbędą się Mistrzostwa Wielkopolski w Programowaniu Zespołowym (MWPZ), których jednym z oficjalnych patronów medialnych jest Notatnik Programisty!
Mistrzostwa Wielkopolski w Programowaniu Zespołowym są największą polską imprezą programistyczną. MWPZ mają charakter otwarty i są bezpłatne!
Termin zawodów zaplanowany jest w dniach 4-5 grudnia 2015 roku w Poznaniu i będzie to świetna okazja do zweryfikowania sił w zespołowym rozwiązywaniu problemów.
Organizatorami wydarzenia są
- Wydział Matematyki i Informatyki Uniwersytetu im. Adama Mickiewicza,
- Wydział Informatyki Politechniki Poznańskiej,
- Fundacja S2B .
mwpz.poznan.pl
Facebook:
www.facebook.com/MWPZty
Rejestracja (zostanie uruchomiona w październiku)
REGULAMIN
Lokalizacja
WMI UAM
Wydział Matematyki i Informatyki
Uniwersytet im. Adama Mickiewicza
ul. Umultowska 87
61-614 Poznań
Harmonogram
Piątek (4 grudnia 2015)
11.00-16.00 – Rejestracja, atrakcje (miejsce: TBA)
13.30-14:00 – Uroczyste rozpoczęcie zawodów
14.00-16:45 – Wykłady/prezentacje
16.45-17.30 – Przejazd do laboratoriów zawodników startujących na WMI UAM (miejsce TBA)
17:45-18.45 – Sesja próbna (miejsce: TBA)
19.00-19.30 – Omówienie problemów technicznych (miejsce: TBA)
19.40-20.15 – Przejazd autobusem do centrum i hoteli.
Sobota (5 grudnia 2015)
7:40-8.00 – Zbiórka na placu Mickiewicza
8.00-9.00 – Przejazd z hotelu i centrum do laboratoriów
9.00-9.15 – Zajmowanie stanowisk (miejsce: TBA)
9.15-14.15 – Zawody (miejsce: TBA)
14.30-15:30 – Pizza (miejsce: TBA)
15:30-16:15 – Przejazd zawodników na miejsce zakończenia zawodów ()
16.45-17.30 – Uroczyste zakończenie (miejsce: TBA)
17.30-19.30 – Bankiet (miejsce: TBA)
Jak to wygląda w praktyce?
- Każda drużyna składa się z trzech osób.
- I każda drużyna ma do dyspozycji tylko jeden komputer. Umiejętne rozplanowanie podziału komputera jest ważną częścią strategii.
- Zawodnicy mogą mieć ze sobą wszelkiego rodzaju materiały w formie papierowej (książki, zeszyty, listingi programów, dokumentacje, wydruki). Jednak zabronione jest korzystanie z materiałów elektronicznych i z internetu.
- Drużyna otrzymuje kilka zadań, które należy rozwiązać przygotowując odpowiedni program / algorytm.
- Według indywidualnych umiejętności członków zespołu sami decydujecie o przydziale zadań.
- Rozwiązania wysyłacie do sprawdzenia w trakcie trwania konkursu i są one oceniane na bieżąco. Zrobicie to poprzez specjalny system WWW, który skompiluje przygotowane programy i przeprowadzi szereg testów.
- W odpowiedzi otrzymacie jeden z dwóch możliwych wyników testu: zaakceptowany lub odrzucony. A zatem jeżeli chodź jeden z przypadków testowych nie przejdzie testu nie zaliczacie tego zadania. Jednak możecie w takim przypadku wrócić do stanowiska, wprowadzić poprawki i spróbować wysłać rozwiązanie ponownie.
- Gdy Sprawdzarka odrzuci rozwiązanie, zwróci jeden z komunikatów informujących o rodzaju błędu: Compile Error (błąd kompilacji), Runtime Error (błąd wykonania), Time Limit Exceeded (przekroczony limit czasu), Wrong Answer (błędna odpowiedź) lub Rule Violation (naruszenie zasad zawodów).
- Sprawdzarka daje również możliwość zadawania pytań sędziom. Korzystajcie z niej, żeby poprosić o wyjaśnienie niejasności w treści zadania (lub w formie zawodów), zgłosić błąd w treści, gdy nie wiecie co począć z Compile Error lub gdy macie problemy z komputerem.
- Kolejną ważną funkcjonalnością Sprawdzarki jest możliwość drukowania programów (wydruk zostanie Wam przyniesiony do stanowiska w ciągu paru minut). Jest to ważne ponieważ komputer jest tylko jeden i jak jedna osoba pisze program to druga w tym czasie może szukać na wydruku błędów w swoim programie.
- Oprócz wysyłania zadań Sprawdzarka będzie Wam służyć do śledzenia stanu rywalizacji. Na bieżąco wyświetlany będzie aktualny ranking drużyn, mówiący kto zrobił ile zadań, jakie zadania i w ile czasu.
- Na godzinę przed końcem ranking jest zamrażany. Oznacza to, że nie będą na nim uaktualniane informacje. Celem tego zabiegu jest zwiększenie emocji pod koniec rywalizacji.
- Ostateczne wyniki zostaną przedstawione dopiero na uroczystości zakończenia Mistrzostw.
Praktyczne wskazówki
- Doświadczenie pokazuje, aby najpierw rozpoznać te bardzo łatwe zadania i zabrali się za nie w pierwszej kolejności.
- Dobrym pomysłem będzie obserwowanie rankingu. Zadania, które sporo drużyn ma rozwiązane są z pewnością łatwe
- Zabierając się za konkretne zadanie, na samym początku musicie koniecznie dobrze zrozumieć jego treść.
- Jeśli jesteście pewni, że wszystko w zadaniu jest dla Was jasne, można zabrać się za wymyślanie jak je najlepiej rozwiązać.
- Mało praktyczne jest przy rozwiązywaniu zadania od razu siadać do komputera, ponieważ będzie Was w zespole trzech.
- Na początku najlepiej wziąć kartkę, długopis i spokojnie pomyśleć nad algorytmem rozwiązującym zadany problem.
- Dopiero gdy jesteście pewni, że macie dobry pomysł na rozwiązanie, możecie usiąść do klawiatury i zacząć je implementować.
- Taktyka zależy od Was, zrobicie jak chcecie.
Zadania
Zadania w swej formie podobne są do tych, z którymi być może mieliście okazję się zetknąć na Olimpiadzie Informatycznej, Potyczkach algorytmicznych, bądź innych zawodach w programowaniu (np. Internetowych Mistrzostw Polski w Programowaniu).
Zadanie przykładowe – Ciąg Fibonacciego
Opis
Ciąg Fibonacciego to ciąg liczb całkowitych, określonych rekurencyjnie w następujący sposób.
F0 = 0
F1 = 1
Fn = Fn-1 + Fn-2, dla n ≥ 2Początkowe wyrazy ciągu to: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, …
Zadanie
Dla danego N, podaj wartość N-tej liczby Fibonacciego modulo 10000 (czyli resztę z dzielenia przez 10000).
Specyfikacja wejścia
Pierwsza linia wejścia zawiera liczbę całkowitą D (1 ≤ D ≤ 50), oznaczającą liczbę zestawów danych, które dalej pojawią się na wejściu. Każdy zestaw składa się z jednej linii, zawierającej dokładnie jedną liczbę całkowitą N(1 ≤ N ≤ 20000).
Specyfikacja wyjścia
Dla każdego zestawu danych na wyjściu należy wypisać, w osobnej linii, jedną liczbę całkowitą, będącą resztą z dzielenia FN modulo 10000.
Przykład
5 2 4 8 40 11 3 21 4155 1Tutaj możecie prześledzić rozwiązanie tego przykładowego zadania.
Z czego się uczyć?
Dobrą propozycją jest książka Piotra Stańczyka „Algorytmika praktyczna”, w której autor dzieli się swoimi i kolegów doświadczeniami w konkursach algorytmicznych. Dlaczego? Dlatego, że są to doświadczenia osób, które potwierdziły swoją wiedzę i umiejętności algorytmiczno-programistyczne w konfrontacji z rówieśnikami z całego świata. Piotr to dwukrotny laureat krajowej Olimpiady Informatycznej oraz dwukrotny medalista Bałtyckiej Olimpiady Informatycznej. Wraz z kolegami zwyciężał w Adademickich Mistrzostwach Polski w Programowaniu Zespołowym i zdobywał medale w Adademickich Mistrzostwach Europy Środkowej.
Przypominam, że na konkurs możecie wziąć ze sobą dowolne książki!
Ciekawostka z książki Piotra Stańczyka
Czy kolejność umieszczania danych w tablicach ma znaczenie?
Definiujemy tablicę składającą się z 15000 wierszy i kolumn:
final int SIZE = 15000; int[][] tab = new int[SIZE][SIZE];
Wersja pierwsza – umieszczanie danych „wierszami”:
for (int x = 0; x < SIZE; x++) for (int y = 0; y < SIZE; y++) tab[x][y] = x + y;
Wersja druga – umieszczanie danych „kolumnami”:
for (int y = 0; y < SIZE; y++) for (int x = 0; x < SIZE; x++) tab[x][y] = x + y;
Czas wykonania wersji pierwszej (0,9s.) jest ponad dziesięciokrotnie krótszy od wersji drugiej (11s.).
Dzieje się tak, ponieważ w wersji pierwszej wykorzystujemy pamięć podręczną procesora podczas gdy w wersji drugiej program musi wykonać wiele „skoków” po pamięci. Szybkość działania pamięci podręcznej procesora jest dziesięciokrotnie większa od szybkości pracy pamięci RAM.
Piotr Stańczyk w swojej książce poświęca osobny dział elementom strategii podczas zawodów poruszając takie zagadnienia jak:
- szacowanie oczekiwanej złożoności czasowej
- strategia pracy w drużynie
- szablony kodu
- plik makefile
- parametry kompilacji programów
Internetowe zasoby wiedzy
Polecane przeze mnie:
- SPOJ – Umożliwia sprawdzanie i podnoszenie swoich umiejętności algorytmicznych w różnych językach programowania
- Polski SPOJ – Wersja polska SPOJa.
- Codility – Lekcje algorytmiki. Platforma umożliwia ćwiczenie online w wielu językach.
- CodeFights.com – Serwis udostępniający świetną zabawę w wyszukiwaniu błędów w kodzie (Python, JS, C++ lub Java).
Linki konkursowe
- XVI Akademickie Mistrzostwa Polski w Programowaniu Zespołowym
- ACM International Collegiate Programming Contest
- Wiosenny Turniej w Programowaniu Zespołowym
- Dolnośląskie Zawody w Programowaniu Zespołowym
- Podlaski Turniej w Programowaniu Zespołowym
- Saratov University Online Contester
- online-judge.uva.es – Problem set archive
- Sphere Online Judge
- Olimpiada Informatyczna
- Olimpiada Informatyczna Gimnazjalistów
Historia MWPZ:
- I edycja MWPZ (2003)
- II edycja MWPZ (2004)
- III edycja MWPZ (2005)
- IV edycja MWPZ (2006)
- V edycja MWPZ (2007)
- VI edycja MWPZ (2011)
- VII edycja MWPZ (2012)
- VIII edycja MWPZ (2013)
- IX edycja MWPZ (2014)
- X edycja MWPZ (2015)
Wikipedia
- Mistrzostwa Wielkopolski w Programowaniu Zespołowym
- Akademickie Mistrzostwa Polski w Programowaniu Zespołowym
- Akademickie Mistrzostwa ¦wiata w Programowaniu Zespołowym
- Zawody w Programowaniu Zespołowym
- Online Judge
Artykuł X Mistrzostwa Wielkopolski w Programowaniu Zespołowym pochodzi z serwisu Notatnik programisty.