Zadania - Instytut Informatyki UwB
Transkrypt
Zadania - Instytut Informatyki UwB
Zestaw zadań konkursowych XV Regionalnego Konkursu Informatycznego Instytut Informatyki UwB 28.03.2015 r. Uwaga: Kody źródłowe oraz skompilowane wersje programów w zadaniach 1, 3 i 4 mają być umieszczone na dysku F:\ w katalogu o nazwie „konkurs” i podkatalogach z odpowiednim numerem zadania. Nazwy plików: z1.exe i z1.cpp – program będący rozwiązaniem zadania 1, z3.exe i z3.cpp – zadania 3, z4.exe i z4.cpp – zadania 4. Skrypt z zadania 2 ma być umieszczony w wirtualnym systemie w katalogu domowym użytkownika root (/root) Zadanie 1: Siłacze – kolejna runda Zawody w siłowaniu się na rękę ciągle cieszą się ogromną popularnością. Do każdej edycji zgłasza się bardzo dużo zawodników. System – każdy z każdym – nadal nie może być zastosowany. Nadal rozgrywa się tylko z góry określoną liczbę rund. Nadal nie dopuszcza się, aby dwaj Ci sami zawodnicy walczyli ze sobą więcej niż w jednym meczu. Do regulaminu wprowadza się jednak dwie bardzo istotne zmiany. Po pierwsze, w turnieju może wystartować nieparzysta liczba zawodników. Po drugie, wprowadza się dodatkowe kryterium sortowania zawodników – punkty Buchholza. W każdej rundzie startują zawodnicy dzieleni jak do tej pory na pary zgodnie z zasadą, że najlepszy (w sensie najwyżej sklasyfikowany zawodnik po dotychczas rozegranych rundach) do danej rundy zawodnik startuje z drugim najlepszym zawodnikiem (o ile to możliwe, a może być niemożliwe jeśli już ze sobą walczyli lub jeśli nie można sparować innych par zgodnie z zasadami), trzeci z czwartym, itd. Jeśli z rankingu po pewnej rundzie wynika sytuacja, że w kolejnej rundzie mają spotkać się zawodnicy, którzy już ze sobą walczyli, wówczas dla lepszego z tej pary zawodnika dolosowuje się kolejnego najlepszego jeszcze niesparowanego w danej rundzie zawodnika, z którym tenże zawodnik nie walczył. Mecze rozgrywane są do 5 zwycięskich partii. W przypadku nieparzystej liczby startujących zawodników, w każdej rundzie jeden z nich pauzuje. Pauzuje zawsze najsłabszy zawodnik (zajmujący najgorszą pozycję w aktualnym rankingu). W całym turnieju jeden zawodnik może pauzować tylko jeden raz. Za pauzowaną rundę dany zawodnik otrzymuje jeden punkt - tak jak za wygrany mecz, ale bez punktów Buchholza (jednakże przyjmuje się, że padł wynik 0:0). Jeśli na pewnym etapie rozgrywek okaże się, że już pauzujący zawodnik jest najsłabszy i powinien pauzować ponownie, lub jeśli z pozostałych zawodników nie można rozlosować par gdyż zawodnicy walczyli już przeciw sobie, wówczas zgodnie z zasadą, że zawodnik może pauzować tylko jeden raz, pauzuje kolejny najsłabszy zawodnik, itd. Kryteria ustalania rankingu Ranking zawodników jest zawsze ustalany od zawodnika najlepszego do najgorszego. A) Przed pierwszą rundą ranking jest zgodny z numerem zawodnika. Zawodnik numer 1 jest pierwszy (najlepszy), numer 2 jest drugi, itd. B) Po kolejnych rundach o pozycji zawodnika w rankingu decyduje kolejno: a) Liczba wygranych meczów b) Punkty Buchholza – suma liczb wygranych meczów wszystkich przeciwników, z którymi dany zawodnik grał do danej rundy włącznie z tą rundą c) Różnica pomiędzy liczbą wygranych partii, a liczbą partii przegranych d) Liczba partii wygranych e) Niższy numer startowy Dane wejściowe Pierwsza linia zawiera jedną liczbę naturalną n (2 ≤ n ≤ 1000) oznaczającą ilość zawodników zgłoszonych do turnieju. Zawodnicy otrzymują numery startowe od 1 do n. Druga linia zawiera jedną liczbę m (1 ≤ m ≤ 20 oraz m ≤ n) oznaczającą ilość rund, które będą rozegrane w turnieju. Można założyć, że zadana ilość rund gwarantuje możliwość rozlosowania par. Kolejne m serii po floor(n/2) linii każda zawiera po dwie liczby naturalne rozdzielone spacją oznaczające wynik osiągnięty w rywalizacji danej pary. W każdej serii linii, linie są wynikami meczów par posortowanych rosnąco względem pozycji lepszych zawodników z par w aktualnym rankingu. W jednej linii, pierwsza liczba jest liczbą wygranych partii przez wyżej sklasyfikowanego zawodnika, druga liczba jest liczbą wygranych partii przez słabszego zawodnika. Dane wyjściowe Ranking zawodników osiągnięty po rozegraniu wszystkich zadeklarowanych rund, to znaczy n linii zawierających po 5 liczb naturalnych rozdzielonych spacją oznaczające kolejno numer startowy zawodnika, ilość wygranych meczów, punkty Buchholza, ilość wygranych partii oraz ilość partii przegranych. Przykład: Dane wejściowe – tekst (wynik pary numer numer) nie występuje w danych wejściowych 7 4 5 0 (wynik pary 1 2) 5 0 (wynik pary 3 4) 5 0 (wynik pary 5 6) 5 0 (wynik pary 1 3) 5 0 (wynik pary 5 7) 5 0 (wynik pary 2 4) 5 0 (wynik pary 1 5) 5 0 (wynik pary 2 3) 5 0 (wynik pary 6 7) 5 0 (wynik pary 1 6) 5 0 (wynik pary 5 2) 5 0 (wynik pary 7 4) Dane wyjściowe 1 4 9 20 0 5 3 10 15 5 2 2 10 10 10 6 2 9 5 10 3 2 7 5 10 7 2 6 5 10 4 1 6 0 15 Zadanie 2: Nowe przypadki agenta B Kolejna akcja Dżejmsa zakończyła się sukcesem. Ale SSSR wciąż posiada niezgłębione tajemnice na dyskach swoich komputerów ukrytych w niedostępnych bunkrach. Dżejms Błąd jest już bardzo zmęczony, ale nie może zawieść całego cywilizowanego świata. Zauważył jednak, że administrator serwerów SSSR jest bardzo lekkomyślny – nie dba zbytnio o bezpieczeństwo serwerów. Na każdym sprzęcie istnieje mnóstwo kont użytkowników, niektóre wyglądają na dawno nieużywane. Może by tak uprościć sobie życie? Dżejms jest fanem Kevina Mitnicka i zainspirowany jego biografią przyszedł do Ciebie po pomoc: "Help me, please!" Zadania do wykonania UWAGA: - proszę używać poleceń systemowych - system ma prymitywne zabezpieczenia (a nawet błędną konfigurację), więc aby wykonać wszystkie zadania trzeba je odnaleźć i się ich pozbyć - polecenia wykonywać z uprawnieniami użytkownika root 1. Dostać się do systemu (do dyspozycji jest tylko klawiatura, dostęp do CD-ROMu, USB i innych urządzeń jest zabroniony), zdobyć uprawnienia root 2. Odszukać i poprawić błędy konfiguracji uniemożliwiające połączenie się zdalnie z systemem za pomocą ssh 3. Napisać skrypt, który: - znajdzie konta użytkowników nie używane od co najmniej dwóch dni (UWAGA: pominąć konta, do których nigdy nie zalogowano się) - zmieni hasła do tych kont – nowe hasło ma mieć postać: nazwa_użytkownika...UID (np. użytkownik jozef_baniak o UID 1002 miałby hasło jozef_baniak...1002) - pozwoli tym użytkownikom na wykonywanie poleceń z wykorzystaniem sudo - usunie historię wykonywanych przez agenta B poleceń w systemie 4. Plik skryptu dzejmsb.sh jest rozwiązaniem zadania (proszę umieścić skrypt w katalogu domowym użytkownika root) Zadanie 3: Gra półsłówek W letniej ramówce telewizji Tefałen największym hitem będzie nowy program, w którym zobaczymy celebrytów z różnych krajów śpiewająco skaczących do lodowatej wody. Prowadzący program postanowił przygotować się zawczasu, żeby każdy występ opatrzyć śmiesznymi komentarzami. W tym celu chce przygotować jak największy zestaw dowcipnych przejęzyczeń, które całkiem „przypadkowo” będą mu się przytrafiać podczas programu. Twoim zadaniem jest napisać program, który pomoże wygenerować przykłady takich przejęzyczeń polegających na tym, że jedna z liter pewnego słowa w wypowiedzi jest zamieniona z pewną literą w innym słowie, przy czym nadal są to poprawne słowa. Dane wejściowe Pierwsza linia wejścia zawiera w sobie kolejne słowa wyrażenia w pewnym języku. Słowa są oddzielone od siebie pojedynczą spacją. Kolejne linie to spis wszystkich słów danego języka podanych w przypadkowej kolejności. Długość linii nie przekracza 255 znaków. Dane wyjściowe Lista linii będących efektem wszystkich możliwych „przejęzyczeń”, które mogą powstać z zachowaniem poprawności danego języka. Listę przed wypisaniem należy posortować alfabetycznie. Przykład: Dane wejściowe tu jest buk i kora bek bak bok buk tu jest i kora to kura kara Dane wyjściowe to jest buk i kura tu jest bok i kura Zadanie 4: Jolka, Jolka, pamiętasz… kampus ze snu Studenci pewnego uniwersytetu bardzo cieszą się z faktu, że wreszcie mogą studiować w nowoczesnym kampusie na miarę XXI wieku. Kampus jest piękny, ale studia do najłatwiejszych wcale nie należą. Najtrudniejszy przedmiot, to krzyżówkologia. Kto chce tu studiować, musi potrafić w mig układać najrozmaitsze nawet krzyżówki. Na szczęście można (a nawet trzeba) do tego wykorzystywać komputer. Spróbuj napisać program, który pozwoli automatycznie uzupełnić „jolkę”, a pokażesz, że studia na tej uczelni to coś dla Ciebie. Dane wejściowe Pierwsza linia zawiera listę wszystkich słów, które należy umieścić w wyznaczonych polach diagramu (poziomo lub pionowo). Długość linii nie przekracza 255 znaków. Rozmiar i wygląd diagramu opisują kolejne linie (patrz przykład poniżej), przy czym ilość wierszy i kolumn jest zawsze mniejsza niż 50. Występujące w nich znaki ,‘ oznaczają puste pola diagramu, natomiast w miejsce znaków ,+’ należy wstawiać słowa. Można założyć, że istnieje tylko jeden poprawny sposób wypełnienia diagramu podanymi słowami. Dane wyjściowe Kolejne linie powinny zawierać wiersze diagramu wypełnionego literami podanych słów. Przykład: Dane wejściowe KAMPUS UWB PRZY ULICY CIOLKOWSKIEGO ----------+++ -------+--+--------+--+--------+--+--------++++--------+----+++++++++++++ Dane wyjściowe ----------UWB -------K--L--------A--I--------M--C--------PRZY--------U----CIOLKOWSKIEGO