Akademickie Mistrzostwa Polski w Programowaniu Zespołowym



Podobne dokumenty
Akademickie Mistrzostwa Polski w Programowaniu Zespołowym

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

Akademickie Mistrzostwa Polski w Programowaniu Zespołowym

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

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

Matematyka dyskretna - 7.Drzewa

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

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

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

Lista 0. Kamil Matuszewski 1 marca 2016

Drzewa. Jeżeli graf G jest lasem, który ma n wierzchołków i k składowych, to G ma n k krawędzi. Własności drzew

Znajdowanie skojarzeń na maszynie równoległej

Algorytmy i Struktury Danych

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

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

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

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Graf. Definicja marca / 1

Omówienie zadań. Potyczki Algorytmiczne 2016

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

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

Teoretyczne podstawy informatyki

TEORIA GRAFÓW I SIECI

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

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

TEORETYCZNE PODSTAWY INFORMATYKI

Lista 4. Kamil Matuszewski 22 marca 2016

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

SPÓJNOŚĆ. ,...v k. }, E={v 1. v k. i v k. ,...,v k-1. }. Wierzchołki v 1. v 2. to końce ścieżki.

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

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

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

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Drzewa poszukiwań binarnych

Programowanie sieciowe. Tadeusz Trzaskalik

Algorytmy i Struktury Danych, 2. ćwiczenia

Matematyczne Podstawy Informatyki

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

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

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Siedem cudów informatyki czyli o algorytmach zdumiewajacych

Akademickie Mistrzostwa Polski w Programowaniu Zespołowym

Łyżwy - omówienie zadania

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Porządek symetryczny: right(x)

Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

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

Matematyka dyskretna. Andrzej Łachwa, UJ, B/14

Sortowanie topologiczne skierowanych grafów acyklicznych

Kolorowanie wierzchołków grafu

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

1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb.

Egzaminy i inne zadania. Semestr II.

Wybrane podstawowe rodzaje algorytmów

Teoria grafów dla małolatów. Andrzej Przemysław Urbański Instytut Informatyki Politechnika Poznańska

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

Matematyczne Podstawy Informatyki

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

Zaawansowane algorytmy i struktury danych

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Programowanie dynamiczne

Wysokość drzewa Głębokość węzła

Podstawy Informatyki. Sprawność algorytmów

Drzewa poszukiwań binarnych

Wykład 8. Drzewa AVL i 2-3-4

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

zajęcia 1. Bartosz Górski, Tomasz Kulczyński, Błażej Osiński

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

Algorytmy przeszukiwania wzorca

Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova

Programowanie dynamiczne i algorytmy zachłanne

Problem 1 prec f max. Algorytm Lawlera dla problemu 1 prec f max. 1 procesor. n zadań T 1,..., T n (ich zbiór oznaczamy przez T )

Złożoność obliczeniowa klasycznych problemów grafowych

1 Automaty niedeterministyczne

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

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

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Wstęp do programowania

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

PODSTAWY INFORMATYKI wykład 10.

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

Analiza algorytmów zadania podstawowe

Algorytmy zachłanne. dr inż. Urszula Gałązka

5c. Sieci i przepływy

Digraf. 13 maja 2017

Strategia "dziel i zwyciężaj"

Algorytmy w teorii liczb

ĆWICZENIE NR 1 WPROWADZENIE DO INFORMATYKI

Teoria grafów podstawy. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Transkrypt:

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

c h k f e j i a b d g Czy się zatrzyma? Autor zadania: Jakub Łącki Zgłoszenia: 104 z 914 (11%) Zaakceptowane przez 55 z 55 drużyn (100%) AC 55 (52%) WA TLERE

Czy się zatrzyma? while n > 1 do if n mod 2 = 0 then n := bn=2c else n := 3 n + 3 Jeśli liczba jest podzielna przez 3, to już zawsze będzie. Jeśli liczba ma nieparzysty dzielnik, to w pewnym kroku stanie się podzielna przez 3. Zatem TAK tylko dla potęg dwójki. Złożoność czasowa O(1).

c h k f e j i a b d g Herbata z mlekiem Autor zadania: Tomasz Idziaszek Zgłoszenia: 181 z 914 (19%) Zaakceptowane przez 38 z 55 drużyn (69%) AC WA 133 (73%) TLE

Herbata z mlekiem Nie wykonujmy ostatniej dolewki (i tak jej nie wypijemy). Niech h będzie liczbą dolewek herbaty, a m liczbą dolewek mleka. Bajtazar wypije (h + 1)=2 filiżanek herbaty minus to, co zostało na końcu (a zostało mniej niż 1=2 filiżanki herbaty); analogicznie dla mleka. Jeśli zatem h > m, to wypił więcej herbaty. Jeśli h < m, to wypił więcej mleka. Jeśli h = m, to patrzymy, czego zostało więcej na końcu. Z przedostatniej dolewki pochodzi 1=4 filiżanki, więc jeśli s n 1 = H, to wypił więcej mleka. Chyba że n = 1, wtedy wypił tyle samo mleka co herbaty. Złożoność czasowa O(n).

c h k f e j i a b d g Krzyżak Autor zadania: Szymon Acedański Zgłoszenia: 211 z 914 (23%) Zaakceptowane przez 31 z 55 drużyn (56%) AC WA 171 (81%) TLE RE

Krzyżak Należy sprawdzić, czy pozycje much leżą w jednej płaszczyźnie. Jeśli n 3, to odpowiedzią jest TAK. Liczymy iloczyny wektorowe p 1 p 0 p i p 0. Jeśli wszystkie są równe 0, to punkty leżą na jednej prostej odpowiedź TAK. Bierzemy i dla niezerowego iloczynu i liczymy iloczyny mieszane (p 1 p 0 p i p 0 ) (p j p 0 ). Jeśli wszystkie są równe 0, to odpowiedź TAK, w przeciwnym wypadku NIE. Złożoność czasowa O(n).

c h k f e j i a b d g Frania Autor zadania: Szymon Acedański Zgłoszenia: 135 z 914 (14%) Zaakceptowane przez 24 z 55 drużyn (43%) AC WA 97 (71%) TLERE

Frania Osobie, która gromadziła pranie przez d dni, musimy przydzielić 5d klamerek jednego koloru albo 2d klamerek jednego i 3d innego koloru. Rozwiązanie zachłanne: Sortujemy osoby nierosnąco po d, a liczby klamerek trzymamy w zbiorze. Dla każdej kolejnej osoby o wymaganiu d, jeśli istnieje kolor zawierający co najmniej 5d klamerek, to używamy takiego koloru o najmniejszej możliwej liczbie klamerek, a w przeciwnym razie używamy dwóch kolorów zawierających odpowiednio co najmniej 3d i 2d klamerek, znów o najmniejszych możliwych liczbach klamerek. Jeśli w jakimś przypadku żądany kolor nie istnieje, zwracamy NIE. Złożoność czasowa to O(n log n), a pamięciowa O(n).

c h k f e j i a b d g Eksterminacja świstaków Autor zadania: Jakub Radoszewski Zgłoszenia: 65 z 914 (7%) Zaakceptowane przez 24 z 55 drużyn (43%) AC WA 27 (41%) TLE RE

Eksterminacja świstaków Pozycje norek trzymamy posortowane w tablicy. Pozycje magnetofonów trzymamy w zbiorze. Pamiętamy aktualną liczbę norek a, które są w zasięgu muzyki. Jeśli dokładamy magnetofon na pozycji x, to liczymy, ile pokryje nowych norek. Znajdujemy w zbiorze pozycje x 0 ; x 00 dwóch najbliższych magnetofonów (x 0 < x < x 00 ). Wyszukiwaniem binarnym w tablicy znajdujemy liczbę norek w przedziale domkniętym [max(x 0 + l + 1; x l); min(x + l; x 00 l 1)] Dodajemy tę wartość do a, a x do zbioru. Analogicznie przy usuwaniu magnetofonu. Złożoność czasowa O(n + m + d(log n + log m)), pamięciowa O(n + m).

c h k f e j i a b d g Jaskinia Autor zadania: Jakub Łącki Zgłoszenia: 106 z 914 (11%) Zaakceptowane przez 7 z 55 drużyn (12%) AC WA TLE 43 (40%) RE

Jaskinia Drzewo można podzielić na spójne kawałki rozmiaru k wtedy i tylko wtedy, gdy istnieje w nim dokładnie n=k 1 krawędzi łączących dwa poddrzewa o rozmiarach podzielnych przez k. Dla każdego k j n przechodzimy drzewo i liczymy dobre krawędzie. Złożoność czasowa O(n'(n)). Przechodzimy drzewo i dla każdej krawędzi (łączącej poddrzewa rozmiarów i oraz n i) zwiększamy licznik dla każdego dzielnika liczby nwd(i ; n i ). Robiąc to sprytnie, dostajemy złożoność O(n log n). Możemy zawczasu policzyć sobie wartości nwd(i ; n i ) dla wszystkich i, używając algorytmu podobnego do sita Eratostenesa. Złożoność: O(n log log n).

c h k f e j i a b d g Iloraz inteligencji Autor zadania: Marek Cygan Zgłoszenia: 33 z 914 (3%) Zaakceptowane przez 6 z 55 drużyn (10%) AC WA 21 (63%) TLERE

Iloraz inteligencji Tworzymy graf dwudzielny G = (V 1 ; V 2 ; E ), gdzie V 1 to studenci matematyki, V 2 to studenci informatyki, a krawędzie E łączą studentów, którzy się znają. Załóżmy na początek, że iloraz inteligencji każdego studenta jest równy 1. Wtedy w tym grafie musimy znaleźć największą klikę dwudzielną. Jest to równoważne znalezieniu największego zbioru niezależnego w dopełnieniu grafu G 0. Największy zbiór niezależny w G 0 jest dopełnieniem najmniejszego pokrycia wierzchołkowego G 0, a liczność tego pokrycia jest równa liczności największego skojarzenia w G 0 (twierdzenie Königa). Aby znaleźć największe skojarzenie tworzymy sieć przepływową z grafu G 0 przez nadanie każdej krawędzi przepustowości 1 i dodanie źródła połączonego z wierzchołkami V 1 i ujścia połączonego z wierzchołkami V 2 krawędziami o jednostkowej przepustowości.

Iloraz inteligencji W przypadku ogólnym: Zastępujemy każdego studenta o ilorazie inteligencji q przez q identycznych kopii. Zauważamy, że w optymalnym rozwiązaniu dla każdej osoby albo bierzemy jej wszystkie kopie, albo żadną. Aby nie mieć gigantycznej sieci przepływowej, sklejamy z powrotem kopie danej osoby w jeden wierzchołek i łączymy go ze źródłem lub ujściem krawędzią o przepustowości q. Złożoność czasowa (dla przepływu metodą Dinica) to O((n + m) 3 ).

c h k f e j i a b d g Prostokąt arytmetyczny Autor zadania: Jakub Radoszewski Zgłoszenia: 31 z 914 (3%) Zaakceptowane przez 4 z 55 drużyn (7%) AC WA 17 (54%) TLE RE

Prostokąt arytmetyczny Prostokąt o wysokości co najmniej 2 jest arytmetyczny wtedy i tylko wtedy, gdy wszystkie kolumny tego prostokąta są ciągami arytmetycznymi i pierwsze dwa wiersze tego prostokąta są ciągami arytmetycznymi. Dla każdego pola (i ; j ) wyznaczamy długość najdłuższego ciągu arytmetycznego w dół oznaczmy ją przez t [i ; j ]. Teraz dla (i ; j ) będziemy chcieli sprawdzić, jaki jest największy prostokąt arytmetyczny o wysokości t [i ; j ] zawierający (i ; j ) na górnym brzegu. Będzie on zawierał kolumny z przedziału [a; b] \ [; ], gdzie [a; b] oznacza przedział, w którym w wierszach i oraz i + 1 są ciągi arytmetyczne, [; ] oznacza przedział, w którym wartości t [i ; ] są nie mniejsze niż t [i ; j ].

Prostokąt arytmetyczny Prostokąty arytmetyczne o wysokości 1, wartości t [i ; j ] oraz przedziały [a; b] obliczamy programowaniem dynamicznym w czasie O(nm). Przedziały [; ] dla każdego z wierszy liczymy w czasie O(m) klasycznym sposobem znanym z zadania Działka z IX Olimpiady Informatycznej. Złożoność czasowa i pamięciowa O(nm).

c h k f e j i a b d g Bajtocki Bieg Uliczny Autor zadania: Jakub Łącki Zgłoszenia: 24 z 914 (2%) Zaakceptowane przez 2 z 55 drużyn (3%) AC WA TLE 10 (41%) RE

Bajtocki Bieg Uliczny Dla każdego wierzchołka x definiujemy dwie ścieżki: ścieżkę dolną idziemy z x, wybierając krawędzie w dół, a gdy nie jest to możliwe, to idziemy w prawo, ścieżkę prawą idziemy, wybierając krawędzie w prawo, a gdy nie jest to możliwe, to idziemy w dół. Ścieżki wyznaczamy implicite, dla każdego wierzchołka i dla każdego i zapamiętujemy, dokąd trafimy po wykonaniu 2 i kroków na ścieżce dolnej i prawej. Czas wstępnych obliczeń to O(n log n).

Bajtocki Bieg Uliczny Chcemy sprawdzić, czy z wierzchołka p da się dojść do wierzchołka q, który leży na prawo i w dół od p. Rozważamy prostokąt o rogach w p i q. Wyznaczamy punkt a, w którym ścieżka dolna z p dochodzi do brzegu prostokąta, oraz analogiczny punkt b dla ścieżki prawej z p. Robimy to w czasie O(log n). Odpowiedź jest TAK, wtedy i tylko wtedy gdy a leży na dolnej krawędzi prostokąta, a b na prawej krawędzi. (Bo wtedy ścieżka z 1 do q musi przecinać dolną lub prawą ścieżkę z p.) Złożoność czasowa O((n + k ) log n).

c h k f e j i a b d g Drzewo i mrówki Autor zadania: Szymon Acedański Zgłoszenia: 5 z 914 (0%) Zaakceptowane przez 1 z 55 drużyn (1%) AC WA 2 (40%) TLE RE

Drzewo i mrówki Wczytujemy rozmiar drzewa znamy długość ścieżki. Wczytując wejście, symulujemy marsz Lewej Mrówki, do momentu pierwszego spotkania (dla każdej krawędzi sprawdzamy, czy doszło na niej do spotkania, bo wiedząc, jaką odległość w górę i w dół pokonała Lewa Mrówka, znamy dystans, jaki musiała pokonać Prawa). Wczytujemy wejście dalej, tym razem symulując marsz Prawej Mrówki do momentu, aż Lewa Mrówka wróci do korzenia (można pokazać, że zawsze będzie szybsza od Prawej). Dalej symulujemy marsz Prawej Mrówki aż do momentu drugiego spotkania. Złożoność czasowa O(n), pamięciowa O(1).

c h k f e j i a b d g Generator bitów Autor zadania: Tomasz Idziaszek Zgłoszenia: 19 z 914 (2%) Zaakceptowane przez 0 z 55 drużyn (0%) WA 16 (84%) TLE

Generator bitów Tworzymy graf skierowany, w którym wierzchołkami są możliwe wartości ziarna i z każdego wierzchołka wychodzi dokładnie jedna krawędź do wierzchołka, który zawiera wartość uaktualnionego ziarna. Etykietujemy wierzchołki cyframi 0 i 1 (etykietą wierzchołka x jest 0, jeśli x < bm=2c). Szukamy liczby takich wierzchołków x, że n-wierzchołkowa ścieżka zaczynająca się w następniku x ma listę etykiet zgodną z ciągiem b 1 ; : : : ; b n.

Generator bitów Każdą słabo spójną składową grafu rozważamy osobno. Gdyby składowa była pojedynczą ścieżką, to algorytmem Knutha-Morrisa-Pratta szukalibyśmy ciągu b n ; b n 1 ; : : : ; b 1 w słowie złożonym z etykiet odwróconej ścieżki w czasie O(n + m). Gdyby składowa była drzewem, to moglibyśmy przeszukać drzewo w głąb, symulując algorytm na każdej ścieżce. Aby uzyskać złożoność O(n + m) należy wcześniej spamiętać przejścia algorytmu KMP. W ogólnym przypadku (cykl z podczepionymi poddrzewami) rozwijamy cykl 3 razy i sprowadzamy zadanie do przypadku z drzewem, odpowiednio uwzględniając przypadek, gdy ciąg bitów nawija się wielokrotnie na cykl. Złożoność czasowa i pamięciowa O(n + m).

koniec