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