Prawie 25 lat Olimpiady Informatycznej Karol Pokorski Instytut Informatyki Uniwersytetu Wrocławskiego 8 października 2016 Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Ostrzeżenie Nie znam zadań na OI, więc zagadnienia podawane jako podstawowe/zaawansowane nie są w żaden sposób wskazówką n.t. przyszłych treści zadań na OI. Ostrzeżenie Sporo rzeczy na slajdach to moje prywatne opinie i obserwacje, a nie oficjalne stanowisko kogokolwiek z ramienia OI. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej I etap Nie zmieniło się od lat: miesiąc czasu na rozwiązanie pięciu zadań, dość popularne są progi kwalifikacyjne rzędu ≈ 100 punktów. Zmiany: podzadania. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej II etap Nie zmieniło się od lat: dzień próbny (jedno zadanie, 3 h) oraz dwa dni właściwe (dwa zadania, 5 h), wyniki nie są jawne, widać tylko wyniki na testach przykładowych. Zmiany: podzadania, testy „ocen”, bardzo duża wariancja progów kwalifikacyjnych do finału. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Finał Nie zmieniło się od lat: dzień próbny (jedno zadanie, 3 h) oraz dwa dni właściwe (trzy zadania, 5 h), Zmiany: podzadania, testy „ocen”, odsłanianie wyników, trudność zadań, wyższe wyniki zawodników, spryt zawodników, częste udane „oszustwa” organizatorów. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej C++11 listy inicjalizacyjne (std::vector<int> x = {1, 2, 3};) automatyczne określanie typu (auto), pętle for oparte na zakresie (for (int x : tab)), funkcje i wyrażenia lambda ([](int a, int b){ return a + b; }), typy krotkowe (std::tuple), nowe kontenery STL (std::unordered set oraz std::unordered map), wyrażenia regularne (#include <regex>), inteligentne wskaźniki (std::shared ptr, std::unique ptr). Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Czynniki kluczowe w odniesieniu sukcesu na II etapie znajomość podstawowych algorytmów i struktur danych, inteligencja, zdolność kojarzenia faktów, zauważania powiązań i zależności, umiejętność szybkiej implementacji wymyślonych rozwiązań, umiejętność testowania, nie popełnianie błędów. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Podstawowe algorytmy i struktury danych rekurencja, przeszukiwanie z nawrotami, metoda „dziel i zwyciężaj”, wyszukiwanie binarne (oraz jego zastosowania) (zadanie Test na inteligencję), obsługa dużych liczb, algorytmy zachłanne, programowanie dynamiczne (zadanie Konduktor), maski bitowe (zadanie Wiedźmak), teoria gier (nimbery, funkcja mex, twierdzenie Sprague–Grundy’ego) (zadanie Kamyki). Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Podstawowe algorytmy i struktury danych Struktury danych: stos, kolejka, kopiec binarny, drzewo BST, statyczne drzewo przedziałowe (zadanie Łyżwy), Union–Find (zadanie Biura). Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Podstawowe algorytmy i struktury danych Teoria liczb: algorytm Euklidesa i rozszerzony algorytm Euklidesa, odwrotność modularna (zadanie Wyszukiwanie wzorca), dzielniki liczb, rozkład na czynniki pierwsze, sito Eratostenesa (zadanie Sejf), szybkie potęgowanie modularne. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Podstawowe algorytmy i struktury danych Kombinatoryka: podzbiory, permutacje (silnia), kombinacje (symbol Newtona) (zadanie Permutacja), interpretacje kombinatoryczne, zasada włączeń i wyłączeń. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Podstawowe algorytmy i struktury danych Algorytmy tekstowe: najdłuższy podciąg wspólny, wyszukiwanie wzorca i funkcja π (zadanie Szablon), haszowanie podsłów (zadanie Korale), okresy słów, pierwiastki słów, lemat o okresowości (zadanie Kafelki), algorytm Manachera (zadanie Antysymetria). Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Podstawowe algorytmy i struktury danych Algorytmy grafowe: reprezentacja listowa i macierzowa grafu, przeszukiwanie w głąb (DFS) (zadanie Gildie) i wszerz (BFS), kolejność pre-order, post-order, in-order, sortowanie topologiczne, silnie spójne składowe (zadanie Profesor Szu), minimalne drzewo rozpinające (zadanie Labirynt), cykl Eulera, grafy funkcyjne (zadanie Randka), algorytm Dijkstry (zadanie Sumy). Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Podstawowe algorytmy i struktury danych Geometria obliczeniowa: iloczyn skalarny i iloczyn wektorowy, technika zamiatania, najbliższa i najdalsza para punktów, sortowanie kątowe, otoczka wypukła (zadanie Wyspy). Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Czynniki kluczowe w odniesieniu sukcesu na finale znajomość trudniejszych algorytmów i struktur danych, znajomość sztuczek algorytmicznych, strategia, zachowanie spokoju, elastyczność dla zmieniających się warunków, intuicja i wyczucie, szybkość, nie popełnianie błędów, wytrenowanie. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Trudniejsze algorytmy i struktury danych przepływy (zadanie Mosty), skojarzenia w grafach dwudzielnych, macierze (zadanie Chomiki), dwuspójne składowe, test Millera–Rabina (zadanie Najdzielniejszy dzielnik), drzewo palindromiczne. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Sztuczki algorytmiczne meet-in-the-middle (zadanie Szyfr), Mo’s algorithm, równoległe wyszukiwanie binarne (zadanie Meteory), dekompozycja heavy–light. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Olimpiada sport umysłowy, długie przygotowania, ciężka praca, potrzebny trener, mentor, krzywa rozwoju nie jest zbliżona do funkcji liniowej. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Wyjątkowość Olimpiady mało zadań, dużo czasu, prawie bez limitu na trudność zadań, zadania wymagają pomysłu, wiele różnych ścieżek z pozoru sensownych prowadzi do niczego. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej Dlaczego warto? Dla wszystkich: algorytmy i struktury danych (szczególnie na I i II etapie) przydatne w pracy informatyka, umiejętność programowania, motor do wzmożonej pracy nad sobą, nauka jak się uczyć, znajomość własnych sił i słabości. Dla najlepszych: stypendia, prestiż, docenienie, widoczny sens ciężkiej pracy, duża i silna sieć kontaktów, łatwiejsza kariera naukowa, możliwość pracy w wielkiej korporacji za granicą. Karol Pokorski Prawie 25 lat Olimpiady Informatycznej