Kwalifikacja na warsztaty informatyczne Krajowego Fundusz na

Transkrypt

Kwalifikacja na warsztaty informatyczne Krajowego Fundusz na
Kwalifikacja na warsztaty informatyczne
Krajowego Fundusz na rzecz Dzieci
edycja 2013
1
Uwagi wstępne
Poniżej widzisz 4 zadania kwalifikacyjne. Jako rozwiązanie każdego z nich wyślij opis algorytmu wraz z
uzasadnieniem jego poprawności. Opis powinien być przede wszystkim zrozumiały. Przykład działania
lub pseudokod mogą ilustrować opis, lecz nie powinny go zastępować. Częścią rozwiązania jest również
wskazanie złożoności czasowej i pamięciowej rozwiązania i jej (krótkie) uzasadnienie. Pamiętaj, że zrobienie wszystkich nie jest konieczne do zakwalifikowania się na warsztaty. Jeśli nie potrafisz rozwiązać
niektórych problemów, podziel się spostrzeżeniami, które udało Ci się poczynić. Być może zbliżyłeś się
do celu i zdobędziesz kilka punktów.
Rozwiązania prześlij mailem na adres [email protected] oraz na adres biura
funduszu [email protected] do 4 lutego 2013 r.
Preferowany jest format PDF, każde zadanie w osobnym pliku. W nagłówku każdej strony podaj
swoje imię i nazwisko oraz numer zadania.
Do zadania 4. napisz również program, który powinien być implementacją opisanego przez Ciebie
algorytmu. Kod źródłowy programu wyślij przez serwis http://fundusz.sio.mimuw.edu.pl.
Jeśli masz jakieś pytania (w szczególności dotyczące zadań i warsztatów) napisz na adres tomasz.
[email protected]. Pod ten sam adres możesz także stale kierować inne pytania. Jako
tutor postaram się na nie odpowiedzieć lub przekierować je do kogoś, kto będzie bardziej kompetentny
do udzielenia odpowiedzi.
2
Polecane materiały
• T. Cormen, C. Leierson, R. Rivest, C. Stein, Wprowadzenie do algorytmów.
Klasyczny podręcznik do podstaw algorytmiki.
• was.zaa.mimuw.edu.pl
• http://wazniak.mimuw.edu.pl/index.php?title=Algorytmy_i_struktury_danych
Materiały związane z przedmiotem Algorytmy i struktury danych prowadzonym na MIM UW.
W czasie warsztatów będziemy zakładać, że uczestnicy znają kilka podstawowych algorytmów i technik (np. programowanie dynamiczne, metoda dziel i rządź, wyszukiwanie binarne, algorytmy BFS i DFS),
oraz potrafią ich użyć, pisząc programy w języku C++ lub Pascal.
3
Zadania
1. Kable
Bajtazar zarządza siecią n ruterów połączonych m kablami. Ostatnio funkcjonowanie sieci pozostawia
wiele do życzenia. Bajtazar ma podejrzenia, że powodem są wadliwe kable. Chciałby w związku z tym
przetestować kable pod dużym obciążeniem. W tym celu może dla każdego rutera wyłączyć część portów,
część ustawić w trybie odbierania danych, a część w trybie wysyłania danych. Aby dany kabel był
zbadany, port na jednym z jego końców musi wysyłać dane, a port na drugim – odbierać. Bajtazar
chciałby zbadać możliwie dużo kabli równocześnie. Niestety, znacznym utrudnieniem są ograniczenia
ruterów. Każdy z nich posiada dwa parametry: maksymalną liczbę portów, które można ustawić w
trybie nadawania, i maksymalną liczbę portów, które można ustawić w trybie odbierania.
Bajtazar postanowił skonfigurować rutery w następujący sposób: najpierw wyłączył wszystkie porty, a
następnie dla każdego kabla postępował w następujący sposób. Próbował ustawić porty na jego końcach,
tak aby rozważany kabel był zbadany. Jeśli było to możliwe, ustawiał odpowiednio porty, a jeśli nie,
pozostawiał je wyłączone, godząc się z faktem, że kabel nie będzie zbadany.
Pokaż, że liczba kabli, które przetestuje Bajtazar, wynosi przynajmniej jedna trzecia liczby kabli
zbadanych w optymalnymo rozwiązaniu zadania z pierwszego akapitu.
1
2. Patrole
Bitowice, kurort na wybrzeżu Bitocji, to miasto zbudowane na długim i wąskim półwyspie. Sieć ulic w
tym mieście ma strukturę kraty — znajduje się tam k ulic równoległych do brzegu morza i n ulic doń
prostopadłych. Drogi przecinają się łącznie w k ·n punktach. Bitocja przed kilkoma laty była areną wielu
porwań, więc, choć zagrożenie w samych Bitowicach nigdy nie występowało, turyści przybywający do
tego kurortu boją się o swoje bezpieczeństwo. W związku z tym przy niektórych skrzyżowaniach postanowiono postawić policjantów. Wytypowano skrzyżowania, na których pojawiają się turyści, i ustalono,
że dla każdego takiego skrzyżowania policjant musi dyżurować przy tym lub przy jednym z sąsiednich
skrzyżowań. W Bitowicach zdarzają się jednak gwałtowne i ulewne deszcze, więc w trosce o funkcjonariuszy postanowiono wybudować im małe budki, w których mogliby schronić się przed opadami, nie
schodząc z posterunku. Przy niektórych skrzyżowaniach warunki techniczne uniemożliwiają postawienie
budki, co znacznie utrudniło zadanie.
Masz dane skrzyżowania, w których pojawiają się turyści oraz skrzyżowania, na których można
wybudować budki. Rozstrzygnij, czy da się rozmieścić budki, tak aby spełnić opisane wyżej warunki.
Jeśli można, podaj minimalną liczbę budek, które trzeba postawić.
Uwaga: Bitowice leżą na naprawdę bardzo długim i wąskim półwyspie. Przyjmij, że 3 ¬ k ¬ 10 i
optymalizuj czas działania ze względu na n.
3. Przebudowa1
Bajtogród otrzymał dotację na budowę nowoczesnego systemu zarządzania ruchem. W ramach jego
konstrukcji niezbędna jest przebudowa każdego z n skrzyżowań. Wymaga to wyłączenia ruchu każdego
skrzyżowania aż na 30 godzin z rzędu. Aby zminimalizować utrudnienia, prace zawsze zaczynają się
późnym wieczorem, a kończą dwa dni później wcześnie rano. W ten sposób utrudnienia obejmują jeden
dzień i dwie noce. Ruch w Bajtogrodzie nawet w nocy jest jednak dość duży i nieumiejętne rozplanowanie remontów, w szczególności równoczesne zamknięcie pewnych par skrzyżowań, doprowadziłoby do
paraliżu komunikacyjnego. Miejski inżynier ruchu dla każdej pary skrzyżowań określił, kiedy mogą być
równocześnie zamknięte (nigdy, tylko w nocy lub o dowolnej porze doby).
Termin wykonania prac upływa już za k dni. Rozstrzygnij, czy można zdążyć na czas, spełniając
wymagania inżyniera ruchu.
Aby uzyskać 10 punktów, Twój algorytm powinien działać w czasie i pamięci O(cn ) dla pewnego
c > 0. Dodatkowe 3 punkty przewidziane są dla rozwiązań działających w czasie O(3n nO(1) ), kolejne 3
dla rozwiązań działających w pamięci O(2n nO(1) , a dalsze 4 dla rozwiązań spełniających oba wymienione
warunki. (Zwróć uwagę, że możesz zdobyć 6 punktów podając 2 różne algorytmy).
4. Przyjęcia2
W pewnej klasie uczy się n ¬ 50 dzieci. Niektóre pary dzieci lubią się wzajemnie. Dzieci chciałyby
zorganizować przyjęcie, na którym wszystkie dzieci się lubią. Na ile sposobów można to zrobić? (Bierzemy
także pod uwagę przyjęcia, na których jest jedno dziecko albo 0 dzieci). Pełna wersja tego zadanie, wraz
ze specyfikacją wejścia i wyjście znajdzie się w serwisie http://fundusz.sio.mimuw.edu.pl.
1 Za to zadanie można otrzymać bonus o równowartości jednego zadania. Uzyskanie dodatkowych punktów może jednak
być trudniejsze niż niż zrobienie pozostałych zadań.
2 Zadanie zapożyczone z dodatkowych zajęć z programowania dla zainteresowanych studentów I semestru informatyki
na UW
2