Algorytmy i struktury danych 2 (ASD2)

Transkrypt

Algorytmy i struktury danych 2 (ASD2)
Algorytmy i Struktury Danych 2 (ASD2)
Semestr zimowy 2008/2009
Kraków, 15.11.2008
(popr. 12.12.2008)
Algorytmy i struktury danych 2 (ASD2)
Kolokwium nr 1 (wersja poprawiona)
Napisz algorytmy w pseudokodzie rozwiązujące poniższe problemy (zakładamy, iż dane wejściowe są
już wczytane). Określ złożoność czasową i pamięciową podanych rozwiązań. Prosimy również o krótkie objaśnienie swojego rozwiązania (np. definicja podproblemu). Nie jest wymagana implementacja:
sortowania, wyszukiwania binarnego, stosu, kolejki, kopca, funkcji min i max. W komentarzu należy
opisać wszystkie klucze i kryteria.
Zadanie 1. Zbiory niezależne
Podana jest kolekcja n przedziałów domkniętych o końcach w liczbach całkowitych. Podzbiór przedziałów formuje zbiór niezależny, jeśli każde dwa różne przedziały ze zbioru mają puste przecięcie. Ile
jest zbiorów niezależnych w podanej kolekcji? Uwaga: zbiór pusty jest oczywiście niezależny.
Wejście:
n — liczba przedziałów
lewy[1, . . . , n], prawy[1, . . . , n] — tablice, zawierające odpowiednio lewe i prawe końce przedziałów
Wyjście:
Liczba zbiorów niezależnych w podanej kolekcji.
Przykład:
n=4
lewy = {1, 4, 6, 2}
prawy = {3, 5, 8, 7}
Wynik dla testu przykładowego:
9
Zadanie 2. Zakochany Bob
Alicja i Bob dzielą się pizzą. Pizza jest okrągła i podzielona na n kawałków, niekoniecznie tej samej
wielkości. Gracze biorą kawałki naprzemiennie. Alicja wybiera pierwszy kawałek dowolnie. Każdy
kolejny wzięty kawałek musi sąsiadować z jakimś wcześniej wziętym kawałkiem.
Bob jest zakochany w Alicji. Stara się on zatem, aby Alicja mogła wziąć jak najwięcej pizzy przy
zachowaniu reguł jedzenia. Ile Alicja może zjeść z podanej pizzy, jeśli Bob jej sprzyja? Jaka jest
kolejność jedzenia kawałków realizująca optymalny scenariusz dla Alicji?
Wejście:
n — liczba kawałków pizzy
p[1, . . . , n] — wielkości odpowiednich kawałków (kawałek n-ty sąsiaduje z pierwszym)
Wyjście:
Optymalny wynik dla Alicji na podanej pizzy oraz dowolna kolejność jedzenia kawałków świadcząca
ten wynik.
Przykład:
n=6
p = {1, 9, 10, 9, 1, 1}
Wynik dla testu przykładowego:
28 — optymalny wynik Alicji
2, 1, 3, 6, 4, 5 — kolejność jedzenia świadcząca wynik
Kolokwium
Strona 1/2
Algorytmy i Struktury Danych 2 (ASD2)
Semestr zimowy 2008/2009
Kraków, 15.11.2008
(popr. 12.12.2008)
Zadanie 3. Prom
Rozważmy prom mogący przewozić samochody przez rzekę w obu kierunkach. Oznaczmy jego pojemność (wyrażoną jako maksymalna liczba samochodów, które może zabrać) jako C, natomiast czas
potrzebny na przepłynięcie rzeki w jednym kierunku jako T . Wiemy, że samochody chcące przedostać
się z lewego brzegu na prawy zjawiają się na brzegu w chwilach A[1], A[2], . . . , A[m], natomiast samochody chcące pokonać rzekę w przeciwnym kierunku przyjeżdzają w chwilach B[1], B[2], . . . , B[n].
Twoim zadaniem jest obliczenie najwcześniejszej możliwej chwili, w której wszystkie samochody znajdą się w swoim docelowym miejscu. Możesz założyć, że prom może rozpoczynać i kończyć pracę po
dowolnej stronie rzeki.
Wejście:
C — maksymalna liczba samochodów mogąca jednocześnie znajdować się na promie
T — czas potrzebny na pokonanie rzeki w jednym kierunku
m — liczba samochodów przyjeżdżających z lewej strony rzeki
n — liczba samochodów przyjeżdżających z prawej strony rzeki
A[1, . . . , m] — chwile, w których samochody przyjeżdżają na lewy brzeg rzeki
B[1, . . . , n] — chwile, w których samochody przyjeżdżają na prawy brzeg rzeki
Wyjście:
Najwcześniejsza chwila, w której wszystkie samochody mogą znaleźć się w miejscu docelowym.
Przykład:
C = 2, T = 5, m = 2,
A = {14, 23}
B = {1, 8, 9, 10, 14}
n=5
Wynik dla testu przykładowego:
31
Zadanie 4. Gra
Mamy pudełka n typów, które charakteryzują się dwoma parametrami: masą m[i] i wytrzymałością
w[i]. Wytrzymałość pudełka mówi, jaką maksymalną łączną masę możemy położyć na tym pudełku.
Mamy dowolnie dużo pudełek każdego typu (tzn. dla każdego i mamy dowolnie dużo pudełek o masie m[i] i wytrzymałości w[i]). Dwóch graczy układa z pudełek wieżę, wykonując na zmianę ruchy.
Pojedynczy ruch polega na położeniu na szczycie wieży dowolnie wybranego pudełka, ale tak, aby
nie przekroczyć wytrzymałości żadnego z pudełek tworzących wieżę. Gracz przegrywa wówczas, gdy
nie może wykonać kolejnego ruchu (tzn. gdy dołożenie któregokolwiek pudełka na szczyt spowoduje
zawalenie się wieży). Czy gracz rozpoczynający ma strategię wygrywającą?
Wejście:
n — liczba typów pudełek
m[1, . . . , n] — masy pudełek (liczby całkowite dodatnie)
w[1, . . . , n] — wytrzymałości pudełek (liczby całkowite dodatnie)
Wyjście:
„Tak”, jeśli rozpoczynający ma strategię wygrywającą, „Nie” w przeciwnym przypadku.
Przykład:
n=2
m = {1, 2}
w = {3, 2}
Wynik dla testu przykładowego:
„Tak”
Komentarz do testu przykładowego:
Rozpoczynający, aby wygrać, powinien rozpocząć od pudełka numer 1.
Kolokwium
Strona 2/2

Podobne dokumenty