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