Zadanie Dodatkowe K*. Osaczony.
Transkrypt
Zadanie Dodatkowe K*. Osaczony.
! K* - Osaczony. Algorytm! 01-11-2013 Miejsce Akcji: Pasadena CA, USA. Wróg Sheldona, Leonarda, Howarda i Rajesha - Barry Kripke - oszalał i chce zabić naszego agenta dr. Sheldona Coopera. Opanowała go jakaś choroba (typu zombie) i gdy tylko kogoś ugryzie, to ta osoba przechodzi na jego stronę. Mamy jednak pewną szczepionkę, która uodparnia na tę chorobę. Mamy jej jednak niewiele i musimy ją oszczędzać. Na szczęście choroba ta jest tylko czasowa i jeśli poddamy kwarantannie osoby zarażone, to po 72 godzinach ozdrowieją i wszystko wróci do normy. Opis sytuacji: Na kampusie Kripke wyszedł ze swojego biura po zarażeniu (jego gabinet ma współrzędne (0, 0) na naszej mapie w formie układu współrzędnych. Zaczyna on biegać po korytarzach i kogo napotka to ugryzie zarażając i poddając swojej kontroli, więc każda napotkana przez niego osoba także chce zabić naszego agenta. My mamy szczepionkę i dokładny obraz kto gdzie się znajduje w danym momencie (są to punkty na naszym układzie współrzędnych. Musimy podać szczepionkę osobom, które następnie zamkną drogę ucieczki wszystkim, którzy znajdą się wewnątrz ich “okręgu”). Zakładamy, że każdy któremu podamy szczepionkę będzie wstanie powstrzymać zakażonych bez szkód dla siebie czy otoczenia. Zakładamy również, że osoby znajdujące się na zewnętrznej stronie nie przepuszczą nikogo między sobą - wyznaczenie najbardziej zewnętrznej wypukłej otoczki wystarczy do rozwiązania problemu. Twoje zadanie: Napisz więc algorytm wyznaczający otoczkę wypukłą po wierzchołkach (ludziach), na naszym układzie współrzędnych (mapie). Wejściem do algorytmu będzie oczywiście mapa, w której Kripke znajduje się w samym środku układu, a pozostałe punkty gdzieś na całym układzie wokół niego. Punkty nie poruszają się i nie zmieniają pozycji. Jeśli odmówisz wykonania zadania, Sheldon może zginąć o Leonard, Howard i Rajesh nie wymyślą jakiegoś sposobu aby go uratować. Decyzja czy staniesz po jego stronie, czy po stronie Barrego, należy do Ciebie. Wejście programu: Linia 0: — liczba sytuacji które mogą zajść (układów współrzędnych). Dla każdego układu: Linia 1 — Liczba osób (punktów) na układzie n; Kolejne n linii: x y — współrzędne punktu w układzie (x,y); Struktura wyjścia: K — liczba osób, którym należy podać szczepionkę (ilość punktów w otoczce wypukłej); Kolejnych K linii: x y — to współrzędne punktów w otoczce, począwszy od punktu o największej współrzędnej y (a w drugiej kolejności największą współrzędną x), zgodnie z ruchem wskazówek zegara; Powodzenia Agencie. —1— ! Algorytm! 01-11-2013 Przykładowe dane wejściowe i wynik działania programu dla tych danych. Przykładowe dane wejściowe: fig. 1 — Yours software input data Dane które powinieneś wyprodukować z tego wejścia: fig. 2 — Yours software output data —2—