Łyżwy - omówienie zadania

Podobne dokumenty
Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie Olimpiada O Diamentowy Indeks AGH 2017/18. Informatyka Etap III

Algorytmy i Struktury Danych

Algorytm selekcji Hoare a. Łukasz Miemus

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

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

Drzewa poszukiwań binarnych

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

Tadeusz Pankowski

Zadanie: A2 Kapitan Mambeks i gra w skoczki Plik źródłowy: A2.pas dla języka Pascal Dostępna pamięć: 64 MB A2.c dla języka C A2.

Złożoność informacyjna Kołmogorowa. Paweł Parys

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

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

Gala boksu zawodowego

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

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

Programowanie w Baltie klasa VII

POTRZEBY A B C D E P P P P P

Wyszukiwanie binarne

Akademickie Mistrzostwa Polski w Programowaniu Zespołowym

ALGORYTMY I STRUKTURY DANYCH

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

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

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

Wydział Matematyki I Informatyki ul. Słoneczna Olsztyn

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

Porządek symetryczny: right(x)

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

Kodowanie i kompresja Tomasz Jurdziński Studia Wieczorowe Wykład Kody liniowe - kodowanie w oparciu o macierz parzystości

Def. Kod jednoznacznie definiowalny Def. Kod przedrostkowy Def. Kod optymalny. Przykłady kodów. Kody optymalne

LISTA 1 ZADANIE 1 a) 41 x =5 podnosimy obustronnie do kwadratu i otrzymujemy: 41 x =5 x 5 x przechodzimy na system dziesiętny: 4x 1 1=25 4x =24

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

Poprawność semantyczna

Instrukcje dla zawodników

Drzewa poszukiwań binarnych

Seminarium IO. Zastosowanie algorytmu UCT w Dynamic Vehicle Routing Problem. Michał Okulewicz

TEORETYCZNE PODSTAWY INFORMATYKI

Podstawy Informatyki. Metody dostępu do danych

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

Twój wynik: 4 punktów na 6 możliwych do uzyskania (66,67 %).

FUNKCJE. Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 5 Teoria funkcje cz.1. Definicja funkcji i wiadomości podstawowe

Kompresja bezstratna. Entropia. Kod Huffmana

Jeszcze o algorytmach

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

0-0000, , , itd

Lista 0. Kamil Matuszewski 1 marca 2016

Matematyka dyskretna - 7.Drzewa

Temat: Algorytm kompresji plików metodą Huffmana

Nierówność Krafta-McMillana, Kodowanie Huffmana

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

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

1 Działania na zbiorach

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

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

Zestaw 1 ZESTAWY A. a 1 a 2 + a 3 ± a n, gdzie skªadnik a n jest odejmowany, gdy n jest liczb parzyst oraz dodawany w przeciwnym.

Problemy Decyzyjne dla Systemów Nieskończonych

Algorytmy i struktury danych. wykład 5

Definicja pliku kratowego

Zasada indukcji matematycznej

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

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

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

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

Omówienie zadań. Potyczki Algorytmiczne 2016

3. Macierze i Układy Równań Liniowych

Pomorski Czarodziej 2016 Zadania. Kategoria C

Matematyka dyskretna

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

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

Modelowanie motywów łańcuchami Markowa wyższego rzędu

Kodowanie informacji

Algorytmy i Struktury Danych, 9. ćwiczenia

Maciej Piotr Jankowski

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

7. Teoria drzew - spinanie i przeszukiwanie

Tablice jednowymiarowe

Programowanie dynamiczne

Wstęp do programowania

Python: JPEG. Zadanie. 1. Wczytanie obrazka

Temat: Algorytmy zachłanne

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Rozwiązanie Ad 1. Model zadania jest następujący:

Lekcja : Tablice + pętle

Arkusz kalkulacyjny. Wejście. Wyjście. Przykłady. VII OIG Zawody drużynowe, trening VIII. Dostępna pamięć: 64 MB. 6 V 2013

Funkcje wymierne. Funkcja homograficzna. Równania i nierówności wymierne.

Na poniższym rysunku widać fragment planszy. Pozycja pionka jest oznaczona przez. Pola, na które może dojść (w jednym ruchu), oznaczone są.

Niech x 1,..., x n będzie ciągiem zdarzeń. ---

Zadanie 1. Wejście. Wyjście. Przykład

Korzystanie z podstawowych rozkładów prawdopodobieństwa (tablice i arkusze kalkulacyjne)

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy i struktury danych

Lista 4. Kamil Matuszewski 22 marca 2016

ALGORYTMY I STRUKTURY DANYCH

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

020 Liczby rzeczywiste

Rozpoznawanie obrazu. Teraz opiszemy jak działa robot.

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych.

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Zadanie 1. Algorytmika ćwiczenia

Wstęp Statyczne kody Huffmana Dynamiczne kody Huffmana Praktyka. Kodowanie Huffmana. Dawid Duda. 4 marca 2004

Sumy kwadratów kolejnych liczb naturalnych

Transkrypt:

Komisja Regulaminowa XVI Olimpiady Informatycznej 1 UMK Toruń 12 luty 2009 1 Niniejsza prezentacja zawiera materiały dostarczone przez Komitet Główny Olimpiady Informatycznej.

Treść zadania Wejście Wyjście Przykład Bajtazar prowadzi klub łyżwiarski. Członkowie klubu spotyka ją się regularnie i razem trenują, przy czym korzystają zawsze z łyżew klubowych. Rozmiary łyżew są umownie numerowane od 1 do n. Każdy członek klubu ma pewien rozmiar stopy. U łyżwiarzy występuje jednakże współczynnik tolerancji d na rozmiar łyżew: łyżwiarz o rozmiarze stopy r może nosić łyżwy rozmiarów od r do r + d. Należy przy tym zaznaczyć, że żaden łyżwiarz nie zakłada nigdy jednocześnie dwóch łyżew różnych rozmiarów. Bajtazar zakupił na potrzeby klubu po k par łyżew każdego z rozmiarów od 1 do n. W miarę upływu czasu nowe osoby zapisują się do klubu, a niektóre osoby wypisują się. Bajtazar martwi się, czy na każdych zajęciach będzie miał dla wszystkich członków klubu łyżwy odpowiedniego rozmiaru. Zakładamy, że początkowo nikt nie należy do klubu. Bajtazar dostarczył Ci sekwencję m zdarzeń postaci: przybyło/ubyło x członków klubu o rozmiarze stopy r. Bajtazar chciałby wiedzieć, po każdym takim zdarzeniu, czy ma łyżwy odpowiedniego rozmiaru dla wszystkich członków klubu. Poprosił Cię o napisanie programu, który to sprawdzi.

Treść zadania Wejście Wyjście Przykład Pierwszy wiersz standardowego wejścia zawiera cztery liczby całkowite n, m, k oraz d (1 n 200000, 1 m 500000, 1 k 10 9, 0 d < n), pooddzielane po jedynczymi odstępami i oznaczające odpowiednio: największy rozmiar łyżew, liczbę zdarzeń, liczbę par łyżew każdego rozmiaru zakupionych przez Bajtazara oraz tolerancję rozmiarową stóp łyżwiarzy. Kolejne m wierszy zawiera sekwencję m zdarzeń, po jednym w wierszu. Wiersz (i + 1) szy (dla 1 i m) zawiera dwie liczby całkowite: r i oraz x i (1 r i n d, 10 9 x i 10 9 ), oddzielone po jedynczym odstępem. Jeśli x i 0, to oznacza to, że do klubu zapisało się x i nowych członków o rozmiarze stopy r i. Jeśli natomiast x i < 0, to oznacza to, że z klubu wypisało się x i członków o rozmiarze stopy r i. Możesz założyć, że podana sekwencja zdarzeń ma sens, tzn. z klubu nie mogą wypisać się osoby, które się do niego nie zapisały.

Treść zadania Wejście Wyjście Przykład Twój program powinien wypisać na standardowe wyjście m wierszy. Wiersz i-ty (dla 1 i m) powinien zawierać jedno słowo TAK lub NIE, w zależności od tego, czy po i-tym zdarzeniu Bajtazar ma łyżwy odpowiedniego rozmiaru dla wszystkich członków klubu, czy też nie.

Wyjście Wprowadzenie Treść zadania Wejście Wyjście Przykład Twój program powinien wypisać na standardowe wyjście m wierszy. Wiersz i-ty (dla 1 i m) powinien zawierać jedno słowo TAK lub NIE, w zależności od tego, czy po i-tym zdarzeniu Bajtazar ma łyżwy odpowiedniego rozmiaru dla wszystkich członków klubu, czy też nie. Przykład Dla danych wejściowych: 4 4 2 1 1 3 2 3 3 3 2-1 poprawnym wynikiem jest: TAK TAK NIE TAK Po zajściu wszystkich zdarzeń z podanej sekwencji mamy trzech członków klubu, którzy mogą nosić łyżwy rozmiaru 1 lub 2, dwóch członków, którzy mogą nosić łyżwy rozmiaru 2 lub 3, oraz trzech, którzy mogą nosić łyżwy rozmiaru 3 lub 4. Przy takim składzie klubu rzeczywiście wystarczą po dwie pary łyżew rozmiarów 1, 2, 3 i 4: dwie osoby dostają łyżwy rozmiaru 1; łyżwy rozmiaru 2 dostaje jedna osoba, która może nosić łyżwy rozmiaru 1 lub 2, i jedna, która może nosić łyżwy rozmiaru 2 lub 3; łyżwy rozmiaru 3 dostaje jedna osoba, która może nosić łyżwy rozmiaru 2 lub 3, i jedna, która może nosić łyżwy rozmiaru 3 lub 4; pozostałe dwie osoby dostają łyżwy rozmiaru 4. v. 1.00 1/1 Łyżwy

Na początek warto zauważyć, że zachłanne przydzialenie łyżew pozwala skutecznie sprawdzić czy przydział jest możliwy. Zaczynając od łyżwiarzy o najmniejszych stopach, każdemu łyżwiarzowi przydzielamy parę łyżew o najmniejszym możliwym dostępnym rozmiarze. Jeśli na koniec otrzymamy poprawne rozwiązanie, to odpowiedzią jest TAK, jeśli w pewnym momencie zabraknie odpowiednich łyżew odpowiedź jest NIE. Dlaczego rozwiązanie zachłanne jest poprawne? Jeśli istnieje pewien przydział łyżew, możemy z niego otrzymać ten otrzymany z algorytmu zachłannego przez zamianę przydzielanych łyżew na mniejsze dopóki jest to możliwe.

Oznaczmy przez t i aktualną liczbę łyżwiarzy o rozmiarze stopy i. Zauważmy, że przydział łyżew jest możliwy wtedy i tylko wtedy, gdy dla każdego przedziału (l, r), 1 l l + d r n zachodzi: r d t i (r l + 1)k (1) Ilość łyżwiarzy którzy mogą nosić łyżwy o rozmiarze między l a r Ilość łyżew w rozmiarach od l do r.

Oznaczmy przez t i aktualną liczbę łyżwiarzy o rozmiarze stopy i. Zauważmy, że przydział łyżew jest możliwy wtedy i tylko wtedy, gdy dla każdego przedziału (l, r), 1 l l + d r n zachodzi: r d t i (r l + 1)k (1) Ilość łyżwiarzy którzy mogą nosić łyżwy o rozmiarze między l a r Ilość łyżew w rozmiarach od l do r.

Oznaczmy przez t i aktualną liczbę łyżwiarzy o rozmiarze stopy i. Zauważmy, że przydział łyżew jest możliwy wtedy i tylko wtedy, gdy dla każdego przedziału (l, r), 1 l l + d r n zachodzi: r d t i (r l + 1)k (1) Ilość łyżwiarzy którzy mogą nosić łyżwy o rozmiarze między l a r Ilość łyżew w rozmiarach od l do r.

W jedną stronę warunek 1 jest oczywisty, jeśli łyżwiarzy jest więcej niż odpowiednich łyżew, to nie da się dokonać dobrego przydziału. Żeby zrozumieć dlaczego warunek działa w drugą stronę należy się odwołać do rozwiązania zachłannego. Załóżmy, że łyżew nie dało się przydzielić i dla łyżwiarzy o rozmiarze stopy R d zabrakło łyżew wszystkich rozmiarów od R d do R. Tak więc dla pewnego L R d wszystkie łyżwy rozmiarów od L do R zostały wydane (i zabrakło łyżew rozmiaru R). Takie L możemy wybrać najmniejsze. Jeśli L = 1 to warunek 1 nie jest spełniony dla przedziału (L, R) łyżwiarze rozmiarów stopy od 1 do R d wzięli wszystkie łyżwy rozmiarów od 1 do R i jeszcze zabrakło. Jeśli L > 1 to, jako że rozwiązanie zachłanne przydziela łyżwy możliwie najmniejszego rozmiaru, łyżwiarze o rozmiarach stopy mniejszych od L dostali tylko łyżwy rozmiarów co najwyżej L 1 (gdyby było inaczej, mogliby je wymienić na mniejsze - wynika to z faktu, że L jest najmniejsze o tej własności, że wszystkie łyżwy rozmiarów od L do R zostały wydane dla łyżwiarzy o rozmiarach stop od L do R d). Wtedy też warunek 1 nie jest spełniony dla przedziału (L, R)

Dokonajmy pewnych przekształceń zaprzeczenia warunku 1: (l, r), 1 l l + d r n: dla r d t i > (r l + 1)k (2) Mamy równoważnie dla 1 l r n d t i > (r l + 1 + d)k (3) (t i k) > dk (4) Ostatecznie jeśli warunek (4) jest spełniony dla pewnych l i r oznacza, że przydział łyżew nie jest możliwy.

Dokonajmy pewnych przekształceń zaprzeczenia warunku 1: (l, r), 1 l l + d r n: dla r d t i > (r l + 1)k (2) Mamy równoważnie dla 1 l r n d t i > (r l + 1 + d)k (3) (t i k) > dk (4) Ostatecznie jeśli warunek (4) jest spełniony dla pewnych l i r oznacza, że przydział łyżew nie jest możliwy.

Dokonajmy pewnych przekształceń zaprzeczenia warunku 1: (l, r), 1 l l + d r n: dla r d t i > (r l + 1)k (2) Mamy równoważnie dla 1 l r n d t i > (r l + 1 + d)k (3) (t i k) > dk (4) Ostatecznie jeśli warunek (4) jest spełniony dla pewnych l i r oznacza, że przydział łyżew nie jest możliwy.

Dokonajmy pewnych przekształceń zaprzeczenia warunku 1: (l, r), 1 l l + d r n: dla r d t i > (r l + 1)k (2) Mamy równoważnie dla 1 l r n d t i > (r l + 1 + d)k (3) (t i k) > dk (4) Ostatecznie jeśli warunek (4) jest spełniony dla pewnych l i r oznacza, że przydział łyżew nie jest możliwy.

Dokonajmy pewnych przekształceń zaprzeczenia warunku 1: (l, r), 1 l l + d r n: dla r d t i > (r l + 1)k (2) Mamy równoważnie dla 1 l r n d t i > (r l + 1 + d)k (3) (t i k) > dk (4) Ostatecznie jeśli warunek (4) jest spełniony dla pewnych l i r oznacza, że przydział łyżew nie jest możliwy.

Implementacja zachłanna działa jednak osiąga złożoność O(mnd) (dla każdego z m zdarzeń trzeba od nowa dokonać przydziału łyżew n łyżwiarzom z puli d odpowiednich dla niego łyżew). Poprzez zapamiętanie aktualnie najmniejszych dostępnych łyżew można rozwiązanie (i zaczynanie przydzielania za każdym razem od tego właśnie rozmiaru) nieco zoptymalizować rozwiązanie do czasu O(mn).

Złożoność wykorzystuje sprawdzenie warunku: (t i k) > dk (5) dla kolejnych zdarzeń. Zauważmy, że sprawdzenie (5) sprowadza się do wyznaczenia spójnego podciącu w t 1 k, t 2 k,..., t n d k o najwiekszej sumie oraz sprawdzenie czy jego suma przekracza dk. Oznaczmy przez t i = t i k. Zatem nasze zadanie to wyznaczyć spójny podciąg ciągu t 1, t 2,..., t n d o najwiekszej sumie. W tym celu możemy skorzystać z drzewa przedziałowego.

Złożoność Każdy element drzewa odpowiada pewnemu przedziałowi (a, b) W liściach znajdują się elementy t 1, t 2,..., t n d W każdym węźle odpowiadającym przedziałowi (a, b) pamiętamy dodatkowe wartości: suma : t a + t a+1 +... + t b max : maksymalna suma podciągu t i, t i+1,..., t j ciągu t a, t a+1,..., t b max lewy : maksymalna z sum prefiksowych t a, t a+1,..., t i max prawy : maksymalna z sum sufiksowych t i, t i+1,..., t b

Złożoność Jeśli węzeł p jest rodzicem, a l i r są jego odpowiednio lewym i prawym synem, mamy: suma(p) = suma(l) + suma(r) max lewy(p) = max(max lewy(l), suma(l) + max lewy(r)) max prawy(p) = max(max prawy(r), +max prawy(l) + suma(r)) max(p) = max(max(l), max(r), max prawy(l) + max lewy(r)) Po zbudowaniu drzewa wystarczy sprawdzić czy max dla korzenia przekracza dk.

Złożoność Załóżmy, że mamy pewien ciąg t 1, t 2,..., t n d. Zbudowanie dla niego drzewa zajmuje O(n log n). Następnie zauważmy, że po każdym zdarzeniu modyfikujemy jedną z wartości t i. Po jej zmodyfikowaniu musimy oświeżyć wartości w drzewie, jednak jedyne węzły których wartości się zmienią to te, które znajdują się na drodze od zmodyfikowanego liścia do korzenia. Ponieważ drzewo jest zrównoważone, zatem takich węzłów jest O(log n). Wszystkich zdarzeń jest m zatem ostatecznie mamy złożoność O(n log n + m log n) = O((m + n) log n)

Złożoność I jeszcze jeden drobiazg... ilość członków jacy naraz mogą znaleźć się w klubie trzeba pamiętać w zmiennych 64 bitowych...