Prezentacja rozwiązań zadań - Akademickie Mistrzostwa Polski w
Transkrypt
Prezentacja rozwiązań zadań - Akademickie Mistrzostwa Polski w
Akademickie Mistrzostwa Polski w Programowaniu Zespołowym Prezentacja rozwiązań zadań 27 października 2013 e j fd i bkahgc Egzamin Autor zadania: Jakub Łącki Zgłoszenia: 132 z 935 (14%) Zaakceptowane przez 50 z 52 drużyn (96%) AC WA 67 (50%) TLE RE Egzamin Chcemy znaleźć permutację liczb od 1 do n, w której różnica każdych dwóch sąsiednich liczb wynosi co najmniej k . Da się to zrobić wtedy, gdy k n2 . Przeplatamy dwa ciągi 1 malejące rozpoczynające się od b n + 2 c oraz n. Przykładowo dla n = 6 i n = 7: 3 6 2 5 1 4 4 7 3 6 2 5 1 1 Dla k > n2 się nie da, gdyż różnica między liczbą b n + 2 c a jej n sąsiadem w każdej permutacji wynosi co najwyżej b 2 c. e j fd i bkahgc Janosik Autor zadania: Tomasz Idziaszek Zgłoszenia: 158 z 935 (16%) Zaakceptowane przez 48 z 52 drużyn (92%) AC WA 54 (34%) TLE RE Janosik Janosik ma n szkatułek, w i -tej znajduje się i mieszków ze złotem. Dopóki jakaś szkatułka jest niepusta, to wykonuje on operację: I wybiera szkatułkę z minimalną liczbą mieszków, I jeśli jest w niej jeden mieszek, to daje go biedakowi, I jeśli jest w niej nieparzysta liczba mieszków, to chowa jeden z nich do kieszeni, I w przeciwnym wypadku rozdziela pozostałe mieszki po równo między dwie szkatułki. Należy sprawdzić, ile mieszków zostanie Janosikowi w kieszeni po opróżnieniu wszystkich szkatułek. Janosik I Szkatułki możemy rozważać niezależnie. I Liczba mieszków z i -tej szkatułki, które zostaną rozdane biedakom, to 2blg i c , czyli największa potęga dwójki nie większa niż i . I Zatem wynikiem jest X(i n i =1 2blg i c ) = n (n + 1) 2 bX lg n c j =0 2j min(n 2j + 1; 2j ): e j fd i bkahgc Fotoradary Autor zadania: Tomasz Idziaszek Zgłoszenia: 157 z 935 (16%) Zaakceptowane przez 33 z 52 drużyn (63%) AC WA 95 (60%) TLE RE Fotoradary Mamy drzewo o n węzłach. Chcemy zaznaczyć jak największą liczbę węzłów, tak by na każdej ścieżce było zaznaczonych nie więcej niż k węzłów. 3 2 1 Dzielimy węzły na warstwy: w i -tej warstwie są liście drzewa, które powstaje po usunięciu węzłów z poprzednich warstw. Fotoradary Rozwiązanie zachłanne: I dla k parzystego zaznaczmy węzły z k =2 warstw (lub wszystko, jeśli warstw jest mniej), I dla k nieparzystego dodatkowo bierzemy jeszcze jeden węzeł (o ile istnieje). Wyznaczając warstwy, trzymamy kolejkę węzłów o stopniu 1. Alternatywnie można wyznaczać numery warstw, korzystając z programowania dynamicznego: numer warstwy dla węzła v to druga co do wielkości wysokość poddrzewa zaczepionego w dziecku v plus 1. Czas działania O (n ). e j fd i bkahgc Demonstracje Autor zadania: Jakub Łącki Zgłoszenia: 82 z 935 (8%) Zaakceptowane przez 27 z 52 drużyn (51%) AC WA 43 (52%) TLERE Demonstracje Na prostej mamy zaznaczone n odcinków. Chcemy usunąć dwa z nich, tak aby pozostałe odcinki pokrywały jak najmniejszą część prostej. I Końce odcinków dzielą prostą na co najwyżej 2n fragmentów, które znajdujemy, sortując końce. I Oznaczmy przez d (i ) długość tych fragmentów, które są pokryte tylko przez odcinek i , a przez d (i ; j ) długość tych, które są pokryte przez dwa odcinki i oraz j . Demonstracje Iterujemy się po kolejnych fragmentach, pamiętając w secie, ile odcinków je pokrywa. Jeśli jeden lub dwa, to odpowiednio zwiększamy wartości d. Jeśli teraz chcemy usunąć odcinki i oraz j , to mamy dwa przypadki: I Jeśli d (i ; j ) > 0, to możemy usunąć pokrycie długości d (i ; j ) + d (i ) + d (j ). Aby uwzględnić ten przypadek, sprawdzamy wszystkie fragmenty pokryte przez dwa odcinki. I Jeśli d (i ; j ) = 0, to możemy usunąć pokrycie długości d (i ) + d (j ). Tutaj wystarczy rozważyć takie dwa odcinki, które dają największe wartości d. Czas działania to O (n log n ), gdyż musimy posortować końce odcinków oraz utrzymywać wartości d (i ; j ) w mapie. e j fd i bkahgc Inżynieria genetyczna Autor zadania: Tomasz Idziaszek Zgłoszenia: 115 z 935 (12%) Zaakceptowane przez 24 z 52 drużyn (46%) AC WA 47 (40%) TLE RE Inżynieria genetyczna Mamy ciąg n liczb. Należy z niego wykreślić minimalną liczbę wyrazów, aby powstały ciąg był poprawny (tzn. składał się z k -wyrazowych fragmentów zawierających tę samą liczbę), a ponadto był najmniejszy leksykograficznie. 3 2 3 1 3 1 1 2 4 2 1 1 2 Inżynieria genetyczna I Wyznaczamy tablicę d, gdzie d [i ] to największa długość poprawnego ciągu zawartego w sufiksie zaczynającym się od i -tego wyrazu. Wystarczy iść od tyłu, liczyć wystąpienia poszczególnych liczb i zwiększać wynik, gdy któreś wystąpienie dobije do k . I Jeśli wiemy, że optymalne rozwiązanie składa się z b fragmentów, to pierwszy fragment musi kończyć się na takiej pozycji i , że d [i + 1] = b 1. Znajdujemy największe takie i i spośród liczb występujących co najmniej k razy w prefiksie długości i wybieramy najmniejszą. Analogicznie znajdujemy pozostałe fragmenty. I W rozwiązaniu utrzymujemy tablicę zliczającą wystąpienia liczb w kawałkach ciągu. Aby ją szybko wyczyścić, wystarczy jeszcze raz przejrzeć dany kawałek. Rozwiązanie działa w czasie O (n ). e j fd i bkahgc Bajthattan Autor zadania: Jakub Łącki Zgłoszenia: 25 z 935 (2%) Zaakceptowane przez 9 z 52 drużyn (17%) AC 9 (36%) WA TLE RE Bajthattan Dany jest graf planarny w postaci siatki kwadratowej n n. Z grafu kolejno usuwane są krawędzie i po każdym usunięciu musimy stwierdzić, czy istnieje ścieżka między końcami usuniętej krawędzi. Format danych wymusza rozwiązanie on-line. I Jeśli ścieżka pomiędzy końcami usuniętej krawędzi nie istnieje, to usunięcie tej krawędzi spowodowało, że końce znalazły się w różnych spójnych składowych grafu. Równoważnie zatem możemy badać, które usunięcia zwiększają liczbę spójnych składowych grafu. Bajthattan I Korzystamy ze wzoru Eulera. Jeśli v , e, f i s to liczba wierzchołków, krawędzi, ścian i spójnych składowych grafu planarnego, to zachodzi v e +f = s + 1: I Rozważmy usunięcie jednej krawędzi. Wartość v jest stała, natomiast e zmniejsza się o jeden. Jeśli po obu stronach usuwanej krawędzi mieliśmy tę samą ścianę, to f się nie zmienia (i wtedy s rośnie o jeden), w przeciwnym wypadku f maleje o jeden (i wtedy s się nie zmienia). I Powyższy warunek możemy testować, trzymając strukturę find-and-union na ścianach grafu. W momencie, gdy usuwamy krawędź, dwie ściany należy połączyć. Rozwiązanie działa w czasie O (n 2 + k log n ), gdzie k to liczba usunięć krawędzi. e j fd i bkahgc Kocyki Autor zadania: Jakub Łącki Zgłoszenia: 101 z 935 (10%) Zaakceptowane przez 7 z 52 drużyn (13%) AC WA 52 (51%) TLE RE Kocyki Na płaszczyźnie znajduje się n prostokątów o wymiarach a b (boki długości a są równoległe do siebie). Chcemy wyznaczyć wartość oczekiwaną pola powierzchni części wspólnej dwóch losowo wybranych prostokątów. Wyznaczamy sumę przecięć wszystkich par prostokątów i dzielimy przez n (n2+1) . Suma przecięć może być rzędu n 2 M 2 , zatem albo pamiętamy ją w typie long double, albo sukcesywnie dzielimy przez n (n2+1) , utrzymując ułamek mieszany. Kocyki Wykonujemy zamiatanie od lewej do prawej. Dla pionowego paska pomiędzy dwoma zdarzeniami miotły wyznaczamy sumę pól przecięć par prostokątów ograniczonych do tego paska. Wobec tego na miotle mamy problem jednowymiarowy: wkładamy do niej i wyjmujemy z niej odcinki ustalonej długości oraz pytamy się o sumę długości przecięć odcinków na miotle. Złożoność czasowa O (n log n ). Kocyki Miotłę można zaimplementować za pomocą drzewa przedziałowego indeksowanego początkami odcinków, które potrafi wyznaczyć liczbę odcinków i sumę początków odcinków na zadanym przedziale. I Wstawiając nowy odcinek do miotły, uwzględniamy osobno przecięcia z odcinkami zaczynającymi się wcześniej, a osobno z zaczynającymi się nie wcześniej. I Dla tych pierwszych suma długości przecięć ze wstawionym odcinkiem to: P xk k i =1 (xi + k x: a) .. . x2 x1 x a e j fd i bkahgc Autostrada Autor zadania: Jakub Radoszewski Zgłoszenia: 64 z 935 (6%) Zaakceptowane przez 6 z 52 drużyn (11%) AC WA 33 (51%) TLE RE Autostrada Na prostej zaznaczone jest n punktów o współrzędnych a1 ; : : : ; an . Chcemy zaznaczyć na niej równo oddalone od siebie punkty bi = y + x i , tak żeby b1 a1 b2 a2 ::: an 1 bn an bn +1 : Wyznaczyć przedział wartości x , dla którego da się to zrobić. I Wartości (x ; y ), dla których istnieje rozwiązanie, spełniają nierówności y + x i ai y + x (i + 1), czyli ai I x (i + 1) y ai x i: Dla ustalonego x możemy w czasie O (n ) znaleźć różnicę f (x ) między ograniczeniem górnym na y a ograniczeniem dolnym na y. Autostrada y f (x ) x1 I I x x2 x Wyszukiwaniem ternarnym znajdujemy takie x , dla którego f (x ) jest największe. Wyszukiwaniem binarnym znajdujemy w przedziałach (0; x ] i [x ; 1) takie x1 i x2 , że f (x1 ) = f (x2 ) = 0. Czas działania to O (n log M ). e j fd i bkahgc Heros Autor zadania: Tomasz Idziaszek Zgłoszenia: 47 z 935 (5%) Zaakceptowane przez 4 z 52 drużyn (7%) AC WA 23 (48%) TLE RE Heros Dany jest ważony graf skierowany o n wierzchołkach, przy czym stopień wyjściowy jest ograniczony przez 10. Mamy też p informacji, że pewien wierzchołek jest niedostępny w pewnym przedziale czasu. Chcemy znaleźć najkrótszą ścieżkę między zadaną parą wierzchołków. I Jeśli dla wierzchołka v mamy ` przedziałów niedostępności, to dzielimy ten wierzchołek na ` + 1 wierzchołków v 0 ; : : : ; v ` odpowiadających za spójne kawałki czasu, w których v jest dostępny. I Teraz dla każdego v i chcemy wyznaczyć minimalną chwilę zawartą w przedziale dostępności v i , w której możemy dotrzeć do v . Heros I Korzystamy z algorytmu Dijkstry. W nowym grafie mamy co najwyżej n + p wierzchołków i 10(n + p ) krawędzi. I Musimy uważać na krawędzie. Jeśli dojechaliśmy do wierzchołka v i w czasie t i relaksujemy krawędź vu, to potencjalnie musimy rozważyć wiele wierzchołków u j . Ale wszystkie poza pierwszym już nigdy nie zostaną poprawione, więc możemy je usunąć z dalszych relaksacji. u1 u2 vi t Złożoność czasowa O ((n + p ) log(n + p )). u3 e j fd i bkahgc Gra w kulki Autor zadania: Jakub Radoszewski Zgłoszenia: 32 z 935 (3%) Zaakceptowane przez 2 z 52 drużyn (3%) AC WA 26 (81%) TLE Gra w kulki Mamy parzystą liczbę kulek, każda zawiera jedną cyfrę. Czy da się podzielić kulki na dwa równoliczne zbiory, tak by iloczyn cyfr w każdym zbiorze był równy? Na początek trywialne przypadki: I Jeśli jest jedno 0, to NIE. Jeśli jest więcej zer, to TAK. I Liczba piątek musi być parzysta, tak samo liczba siódemek. Pozostałe cyfry są iloczynami 2 i 3. Można więc sprawdzać też inne warunki, np. I Jeśli liczba czynników 2 lub 3 w iloczynie wszystkich kulek jest nieparzysta, to NIE. Gra w kulki Kluczowy warunek: I Jeśli istnieje rozwiązanie, to istnieje takie, w którym liczba kulek zawierających daną cyfrę nie różni się w zbiorach o więcej niż 6. Dowód poprawności powyższego warunku nie jest prosty (my wspomagaliśmy się komputerem). Dzięki niemu można napisać przeszukiwanie z nawrotami, które mieści się w limicie czasu. e j fd i bkahgc Cieśla Autor zadania: Tomasz Idziaszek Zgłoszenia: 22 z 935 (2%) Zaakceptowane przez 0 z 52 drużyn (0%) WA 18 (81%) TLERE Cieśla Dany jest prostokąt n m, w którym pola zamalowano na biało lub czarno. Chcemy wyciąć z niego dwa trójkąty, które po sklejeniu dadzą nam jak największą kwadratową szachownicę. I Oba trójkąty muszą być prostokątne równoramienne, pokolorowane w szachownicę, o tym samym kolorze pola przy kącie prostym. I Można je rozdzielić linią prostą (poziomą, pionową lub w jednym z dwóch kierunków skośnych). Cieśla I Dla każdej z O (n + m ) półpłaszczyzn wyznaczonych przez te proste i koloru przy kącie prostym chcemy wyznaczyć rozmiar największego trójkąta pokolorowanego w szachownicę zawartego w tej półpłaszczyźnie. I Dla ustalonego trójkąta pokolorowanego w szachownicę możemy rozważyć 8 półpłaszczyzn, które go zawierają: Cieśla I Dla każdego pola możemy wyznaczyć maksymalny trójkąt pokolorowany w szachownicę, który ma kąt prosty na tym polu. Metodami znanymi z zadania Działka można to dla każdej z 4 orientacji zrobić w czasie O (nm ). I Dla każdej półpłaszczyzny mamy zatem największy maksymalny trójkąt, który dotyka brzegu półpłaszyzny. Zamiataniem możemy wyznaczyć największy trójkąt, który dotyka brzegu (tu musimy pamiętać, czy brzeg półpłaszczyzny dotyka wierzchołka przy kącie). I Drugim zamiataniem możemy wyznaczyć największy trójkąt zawarty w półpłaszczyźnie. Czas działania O (nm ). koniec