Akademickie Mistrzostwa Polski w Programowaniu Zespołowym



Podobne dokumenty
Akademickie Mistrzostwa Polski w Programowaniu Zespołowym

Akademickie Mistrzostwa Polski w Programowaniu Zespołowym

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

Akademickie Mistrzostwa Polski w Programowaniu Zespołowym

Omówienie zadań. Potyczki Algorytmiczne 2016

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Graf. Definicja marca / 1

Luty 2001 Algorytmy (4) 2000/2001

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA

Wstęp do programowania

Pole wielokąta. Wejście. Wyjście. Przykład

Zad.3. Jakub Trojgo i Jakub Wieczorek. 14 grudnia 2013

Wykład 8. Drzewo rozpinające (minimum spanning tree)

Lista 4. Kamil Matuszewski 22 marca 2016

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Przecięcia odcinków. Wykład /07

VII Olimpiada Matematyczna Gimnazjalistów

Algorytmiczna teoria grafów

Znajdowanie skojarzeń na maszynie równoległej

Wydział Matematyki I Informatyki ul. Słoneczna Olsztyn

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

a) 7 b) 19 c) 21 d) 34

Ogólne wiadomości o grafach

Internetowe Ko³o M a t e m a t yc z n e

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

TEORETYCZNE PODSTAWY INFORMATYKI

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Podstawowe własności grafów. Wykład 3. Własności grafów

Kombinowanie o nieskończoności. 3. Jak policzyć nieskończone materiały do ćwiczeń

Sortowanie. Bartman Jacek Algorytmy i struktury

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

Algorytmiczne Aspekty Teorii Gier Rozwiązania zadań

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Kolorowanie wierzchołków Kolorowanie krawędzi Kolorowanie regionów i map. Wykład 8. Kolorowanie

XIII Olimpiada Matematyczna Juniorów

Treści zadań Obozu Naukowego OMG

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Łyżwy - omówienie zadania

TEORETYCZNE PODSTAWY INFORMATYKI

PRÓBNY EGZAMIN MATURALNY Z MATEMATYKI poziom rozszerzony

Konkurs dla gimnazjalistów Etap szkolny 12 grudnia 2013 roku

Dynamiczne drzewa. Marian M. Kędzierski. 26 listopada Wstęp Euler-Tour Trees Dynamiczna spójność Algorytm Dinica Link-Cut Trees

Matematyka dyskretna - 7.Drzewa

Lista 0. Kamil Matuszewski 1 marca 2016

Treści zadań Obozu Naukowego OMG

9. Podstawowe narzędzia matematyczne analiz przestrzennych

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

LX Olimpiada Matematyczna

Mecz Matematyczny. Rozwiązania 11 marca 2016

Algorytmy w teorii liczb

Digraf. 13 maja 2017

Algorytmy i Struktury Danych, 2. ćwiczenia

EGZAMIN ÓSMOKLASISTY od roku szkolnego 2018/2019

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Programowanie obiektowe

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Algorytmika Problemów Trudnych

7. Teoria drzew - spinanie i przeszukiwanie

Wrocław, Wstęp do informatyki i programowania: liczby pierwsze. Wydział Matematyki Politechniki Wrocławskiej.

domykanie relacji, relacja równoważności, rozkłady zbiorów

Analiza algorytmów zadania podstawowe

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

METODY KONSTRUKCJI ZA POMOCĄ CYRKLA. WYKŁAD 1 Czas: 45

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Wykład 16. P 2 (x 2, y 2 ) P 1 (x 1, y 1 ) OX. Odległość tych punktów wyraża się wzorem: P 1 P 2 = (x 1 x 2 ) 2 + (y 1 y 2 ) 2

Imię, nazwisko, nr indeksu

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

LXI Olimpiada Matematyczna

LV Olimpiada Matematyczna

Wojewódzki Konkurs Matematyczny dla uczniów gimnazjów 13 luty 2014 Czas 90 minut. Rozwiązania zadań

Zadania z ćwiczeń #18 (pon. 7 maja) Matematyka Dyskretna

Algorytmy i struktury danych. Wykład 4

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

PLANIMETRIA CZYLI GEOMETRIA PŁASZCZYZNY CZ. 1

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Nierówność Krafta-McMillana, Kodowanie Huffmana

Złożoność obliczeniowa zadania, zestaw 2

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Matematyka dyskretna

Lista 4. Kamil Matuszewski 10 maja 2016

Internetowe Ko³o M a t e m a t yc z n e

Wstęp do programowania

MATEMATYKA DLA CIEKAWSKICH. Dowodzenie twierdzeń przy pomocy kartki. Część I

Definicja pliku kratowego

Bukiety matematyczne dla gimnazjum

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

Metody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

Algorytmy dynamiczne. Piotr Sankowski. - p. 1/14

WYMAGANIA EDUKACYJNE NA POSZCZEGÓLNE OCENY Z MATEMATYKI W KLASIE IV

EGZAMIN ÓSMOKLASISTY od roku szkolnego 2018/2019

Algorytm Dijkstry znajdowania najkrótszej ścieżki w grafie

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Egzamin ósmoklasisty od roku szkolnego 2018 / Matematyka. Przykładowy arkusz egzaminacyjny (EO_6) Czas pracy: do 150 minut

Rozdział 7 Relacje równoważności

Transkrypt:

Akademickie Mistrzostwa Polski w Programowaniu Zespołowym Prezentacja rozwiązań zadań 26 października 2014

a d c k e b g j i f h Adwokat Autor zadania: Jakub Łącki Zgłoszenia: 118 z 857 (13%) Zaakceptowane przez 52 z 57 drużyn (91%) AC 52 (44%) WA TLE RE

Adwokat Mamy dane n odcinków na prostej. Należy znaleźć dwa odcinki, które się nie przecinają (lub stwierdzić, że takowych nie ma). Znajdujemy odcinek o minimalnym prawym końcu oraz odcinek o maksymalnym lewym końcu. Jeśli te dwa odcinki się nie przecinają, to jest to rozwiązanie. Czas działania O(n).

a d c k e b g j i f h Dzielniki Autor zadania: Jakub Radoszewski Zgłoszenia: 186 z 857 (21%) Zaakceptowane przez 44 z 57 drużyn (77%) AC WA TLE 71 (38%) RE

Dzielniki Dla danego ciągu a 1 ; : : : ; a n (a i M ) chcemy znaleźć liczbę par (i ; j ) takich, że a i jest dzielnikiem a j. Niech c[i ] oznacza liczbę wystąpień i w ciągu; wyznaczamy to w czasie O(n + M ). Dla każdego i M rozpatrujemy wszystkie jego wielokrotności j M i dodajemy do wyniku c[i ] c[j ]. Wielokrotności i jest O(M =i ), zatem ta faza działa w czasie O(M + M 2 + M 3 + : : : + M M ) = O(M log M ). Ostateczna złożoność to O(n + M log M ).

a d c k e b g j i f h Ceny Autor zadania: Jakub Radoszewski Zgłoszenia: 90 z 857 (10%) Zaakceptowane przez 27 z 57 drużyn (47%) AC WA 29 (32%) TLE RE

Ceny Chcemy kupić m 16 produktów, mamy do dyspozycji n 100 hurtowni. Znamy cenę każdego produktu w każdej hurtowni oraz koszt dojazdu do hurtowni. Jaki jest najtańszy koszt wszystkich zakupów? Dla każdego podzbioru produktów znajdujemy najtańszy sklep, w którym możemy zakupić ten podzbiór. W tym celu rozważamy każdy podzbiór produktów w każdej hurtowni. Koszt czasowy O(nm2 m ) lub O(n2 m ). Dla każdego podzbioru produktów znajdujemy najtańszy koszt zakupu tych produktów. W tym celu rozważamy każdy podzbiór tego podzbioru i zakładamy, że został on kupiony w jednej hurtowni. Jest to standardowe programowanie dynamiczne po podzbiorach działające w czasie O(3 m ). To daje złożoność O(n2 m + 3 m ).

Ceny Dla każdego podzbioru produktów S znajdujemy c[i ][S ] najtańszy koszt zakupu tych produktów w hurtowniach 1; : : : ; i. Dodajemy hurtownię i + 1: dla każdego podzbioru produktów S sprawdzamy, czy opłaca nam się jechać do tej hurtowni i wymienić część produktów na tańsze. Korzystamy z faktu, że dotychczasowy minimalny koszt zakupu j -tego produktu to c[i ][S ] c[i ][S n fj g]. Złożoność czasowa to O(nm2 m ).

a d c k e b g j i f h Kapitan Autor zadania: Jakub Łącki Zgłoszenia: 105 z 857 (12%) Zaakceptowane przez 28 z 57 drużyn (49%) AC WA 53 (50%) TLE RE

Kapitan Danych jest n punktów na płaszczyźnie. Koszt przejazdu bezpośrednio między punktami (x A ; y A ) oraz (x B ; y B ) to min(jx A x B j; jy A y B j). Znaleźć minimalny koszt przejazdu pomiędzy dwoma zadanymi punktami. Jeśli mamy trzy punkty (x A ; y A ), (x B ; y B ), (x C ; y C ), x A x B x C i bezpośredni koszt przejazdu z A do C wynosi x C x A, to koszt przejazdu nie zwiększy się, jeśli po drodze odwiedzimy punkt B. Z tego wynika, że z danego punktu wystarczy rozważać przejście do najbliższego punktu w każdym z czterech kierunków. Aby znaleźć punkty najbliższe wystarczy dwa razy posortować listę punktów raz względem współrzędnej x i raz względem współrzędnej y. Minimalny koszt znajdujemy algorytmem Dijkstry w grafie o n wierzchołkach i co najwyżej 4n krawędziach w czasie O(n log n).

a d c k e b g j i f h Euklidesowy Nim Autor zadania: Tomasz Idziaszek Zgłoszenia: 98 z 857 (11%) Zaakceptowane przez 22 z 57 drużyn (38%) AC WA 53 (54%) TLE RE

Euklidesowy Nim Na stole leży stos n kamieni. Gracze p i q grają w grę, wykonując naprzemiennie ruchy. Ruch gracza x polega na zabraniu wielokrotności kamieni x lub (jeśli nie może tego zrobić) na dołożeniu x kamieni. Wygrywa gracz opróżniający stos; wyznaczyć który. Jeśli n nie jest podzielne przez d = NWD(p; q) to gra toczy się w nieskończoność. W przeciwnym przypadku dzielimy wszystkie liczby przez d i możemy założyć, że p i q są względnie pierwsze. Załóżmy, że p < q (ale rozważamy jako pierwszego zarówno gracza p jak i gracza q).

Euklidesowy Nim (A) Jeśli zaczyna q i n < q, to przegrywa. (Bo p za każdym razem doprowadza do sytuacji n < p, a q musi dołożyć q. Ponieważ p? q, to w pewnym momencie dołożenie q spowoduje, że n jest podzielne przez p.) (B) Zatem jeśli zaczyna p i n p, to wygrywa, bo doprowadza do sytuacji (A). (C) Jeśli zaczyna p i n < p, to musi dołożyć p i albo wygrywa bo doprowadza do (A) albo n + p q i q musi usunąć q, co sumarycznie powoduje zmniejszenie n o q p. Zatem p przegrywa wtw, gdy n jest podzielne przez q p. (D) Jeśli zaczyna q i n q, to dla z = n mod q, z podzielne przez q p i z < p, wygrywa doprowadzając do (C). W przeciwnym przypadku przegrywa, bo dowolny ruch prowadzi do (B).

a d c k e b g j i f h Benzyna Autor zadania: Jakub Łącki Zgłoszenia: 51 z 857 (5%) Zaakceptowane przez 15 z 57 drużyn (26%) AC WA TLE 18 (35%) RE

Benzyna Mamy nieskierowany ważony graf G o n wierzchołkach, m krawędziach i podzbiór wierzchołków (stacji). Mamy odpowiedzieć na q zapytań postaci czy da się przejechać pomiędzy dwoma stacjami tak, by maksymalna odległość pomiędzy pośrednimi stacjami była nie większa niż. Dla każdego wierzchołka x w G znajdujemy najbliższą mu stację s x i odległość do niej d(s x ; x ). Używamy do tego algorytmu Dijkstry w czasie O(m log n). Dla ustalonej krawędzi xy w G cysterna o baku może nią przejechać, gdy w (xy) = d(s x ; x ) + w (xy) + d(y; s y ). Sortujemy krawędzie względem w i zapytania względem. Dodajemy krawędzie do grafu, utrzymując podział na spójne składowe. Złożoność to O(m log m + q log q).

a d c k e b g j i f h Globalne ocieplenie Autorzy zadania: Jacek Tomasiewicz i Tomasz Idziaszek Zgłoszenia: 140 z 857 (16%) Zaakceptowane przez 10 z 57 drużyn (17%) AC WA TLE 60 (42%) RE

Globalne ocieplenie W ciągu a 1 ; : : : ; a n chcemy znaleźć najdłuższy przedział zawierający jedno minimum i jedno maksimum. Dla każdego elementu i chcemy w czasie stałym wyznaczyć najdłuższy przedział, który zawiera ten element jako jedyne minimum. Granice tego przedziału wyznaczają l 1, r 1 będące najbliższymi elementami a i. l 3 l 2 r 2 r 3 l 1 i r i Niech l 3, l 2, r 2, r 3 będą maksymalnymi elementami w przedziale (l 1 ; r 1 ) najbliższymi do i. Kandydatami na szukany przedział są (l 3 ; r 2 ) i (l 2 ; r 3 ).

Globalne ocieplenie Osobno trzeba rozważyć przypadki, gdy któryś z indeksów l 3, l 2, r 2, r 3 nie istnieje. Wyznaczanie indeksów można zrobić na drzewie przedziałowym w sumarycznym czasie O(n log n) lub korzystając ze stosu w czasie O(n).

a d c k e b g j i f h Jaskinia Autor zadania: Tomasz Idziaszek Zgłoszenia: 19 z 857 (2%) Zaakceptowane przez 5 z 57 drużyn (8%) AC WA TLE 10 (52%)

Jaskinia Dane jest drzewo o n wierzchołkach i m poddrzew: S i składa się z wierzchołków, których suma odległości do a i i b i wynosi co najwyżej d i. Należy znaleźć wierzchołek należący do przecięcia S = T S i, lub stwierdzić że jest ono puste. Dla ustalonego wierzchołka v możemy w czasie O(n + m) wyznaczyć do niego odległości i stwierdzić, czy należy on do S. Znajdujemy w drzewie wierzchołek v, którego wszystkie poddrzewa mają rozmiar nie większy niż 2 3n. Stwierdzamy, że albo v należy do S, albo istnieje poddrzewo v zawierające S, albo S jest puste. Wykonamy O(log n) zejść rekurencyjnych, zatem złożoność algorytmu to O(n + m log n).

Jaskinia Można szybciej: Odległością v od S i jest max(0; d(d(v ; a i ) + d(v ; b i ) d i )=2e): Odległości z v do wszystkich S i możemy wyznaczyć w czasie O(n + m). Znajdujemy odległości z wierzchołka 1, a następnie S i najdalsze od tego wierzchołka. Niech x będzie wierzchołkiem z S i leżącym najbliżej 1. Jeśli S jest niepuste, to zawiera x. Złożoność czasowa to O(n + m).

a d c k e b g j i f h Inscenizacja Autor zadania: Adam Karczmarz Zgłoszenia: 27 z 857 (3%) Zaakceptowane przez 2 z 57 drużyn (3%) AC WA TLE 15 (55%) RE

Inscenizacja W strzelaninie uczestniczy n gangsterów; i-ty z nich odda strzał do p i -tego. Ilu gangsterów pozostanie przy życiu dla ustalonej kolejności strzelania, oraz po każdej z q zmian w tej kolejności? Rozkładamy permutację p 1 ; : : : ; p n na cykle i każdy z nich rozpatrujemy osobno. Przenumerujmy gangsterów na ustalonym cyklu oraz rozwińmy ten cykl 2 razy. Jeśli i strzela pierwszy w cyklu, to i + 1 na pewno zginie i pytamy się ilu gangsterów z przedziału [i + 1; i + n] przeżyje. Tworzymy drzewo przedziałowe, w którym operację zmiany zrealizujemy w czasie O(log n), czyli rozwiązanie będzie działać w O((n + q) log n).

Inscenizacja Dla przedziału gangsterów [x ; y] o długości 2 k pamiętamy informację ilu gangsterów z tego przedziału przeżyje oraz co się stanie z gangsterem y w zależności od tego, czy gangster x odda strzał. x y s x s y Dla przedziału [x ; y] = [x ; y s ] [ [x s ; y] uaktualniamy to w czasie stałym. Kluczowa jest obserwacja, że gangster x s odda strzał jeśli t xs < t ys lub gangster y s nie przeżyje: c[x ; y; i ] = c[x ; y s ; i ] + c[x s ; y; t xs < t ys _ p[x ; y s ; i ] = 0] p[x ; y; i ] = p[x s ; y; t xs < t ys _ p[x ; y s ; i ] = 0]

Inscenizacja Można prościej: Gangster i jest pewniakiem, jeśli t i < t j oraz p j = i. Jeśli odległość na cyklu do następnego pewniaka wynosi d, to przeżyje tam bd=2c gangsterów. Wystarczy utrzymywać zbiór pewniaków i po każdej zmianie t i uaktualniać gangsterów i oraz p i. Złożoność to O((n + q) log n).

a d c k e b g j i f h Filary Autorzy zadania: Jakub Radoszewski i Tomasz Idziaszek Zgłoszenia: 18 z 857 (2%) Zaakceptowane przez 1 z 57 drużyn (1%) AC WA 12 (66%) TLE RE

Filary Z prostokąta o parzystych wymiarach n m wycięto f kwadratów 2 2 tak, że środki każdych dwóch kwadratów są oddalone o co najmniej 6, a ponadto środek każdego kwadratu jest oddalony o co najmniej 3 od brzegu prostokąta. Znaleźć cykl przechodzący po wszystkich niewyciętych polach.

Filary Na początek wypełniamy pusty prostokąt cyklem. Następnie wycinamy kolejne kwadraty, lokalnie poprawiając cykl (rozważamy trzy przypadki). Złożoność O(nm + f ).

a d c k e b g j i f h Hit sezonu Autorzy zadania: Tomasz Kociumaka, Jakub Radoszewski, Wojciech Rytter i Tomasz Waleń Zgłoszenia: 5 z 857 (0%) Zaakceptowane przez 0 z 57 drużyn (0%) WA 3 (60%) TLE

Hit sezonu Dana jest słowo długości n 3000 nad alfabetem RGB* zawierające k 19 symboli *. Należy je pokryć jak najkrótszym słowem nad RGB, przy czym * pasuje do wszystkiego. Wszystkie matryce dłuższe niż n=2 sprawdzamy w sumarycznym czasie O(n 2 ). Rozważając krótszą matrycę będziemy zgadywać * (albo w pierwszej albo w drugiej połówce słowa będzie ich co najwyżej k =2). Robimy to rekurencyjnie, utrzymując zbiór wystąpień matrycy w słowie oraz największy odstęp pomiędzy dwoma kolejnymi wystąpieniami. Jeśli odstęp nie przekracza długości matrycy, to jest ona poprawna. Uaktualnienie zbioru dla * wykonujemy w czasie O(n). Czas działania to O(n 2 + 3 k =2 n).

Hit sezonu Aby efektywnie utrzymywać zbiór wystąpień matrycy na początek wyliczamy w czasie O(n 2 ) dla pierwszej połówki słowa P: Najdłuższe dopasowanie P w każdym możliwym miejscu. Dla każdej litery i każdej * z P, wszystkie przyłożenia P, które przestają być poprawne po zastąpieniu * przez tę literę.

koniec