
Kenarf i Kenaj przygotowali N zadań na tegoroczne warsztaty przygotowujące do II etapu Bitockiej Olimpiady Informatycznej Juniorów. Każdemu z zadań przyporządkowali jako trudności liczby całkowite t1, …, tN. Jednakże, okazało się, że przygotowali o K za dużo zadań, zatem z niektórych z nich chcieliby zrezygnować. Chcieliby wybrać K zadań, których się pozbędą, w taki sposób, żeby różnica między najtrudniejszym, a najłatwiejszym zadaniem, które zostaną, była najmniejsza możliwa.
Obaj panowie są bardzo zarobieni przygotowywaniem paczek, dlatego poprosili Ciebie, żebyś pomógł im wybrać zadania.
Wejście
W pierwszym wierszu wejścia znajdują się dwie liczby całkowite N oraz K oznaczające odpowiednio liczbę zadań oraz liczbę zadań, z których należy zrezygnować. W następnym wierszu następuje ciąg N liczb całkowitych t1, …, tN, gdzie ti oznacza trudność i-tego zadania.
Wyjście
W pierwszym i jedynym wierszu wyjścia należy wypisać jedną liczbę, oznaczającą najmniejszą możliwą różnicę między najtrudniejszym a najprostszym zadaniem, po zrezygnowaniu z pewnych K zadań.
Ograniczenia
1 ≤ N ≤ 1 000 000, 0 ≤ K < N, 1 ≤ ti ≤ 109.
Podzadania
Podzadanie | Warunki | Punkty |
---|---|---|
1 | N ≤ 20. | 22 |
2 | N ≤ 2 000. | 19 |
3 | ti = 1 lub ti = 2 dla wszystkich i = 1, …, N. | 24 |
4 | Brak dodatkowych ograniczeń. | 35 |
Przykład
Wejście | Wyjście | |
|
|
Wielki wyświetlacz, przygotowany przez komitet główny Bitockiej Olimpiady Informatycznej Juniorów (ten sam, co w zadaniu Zepsuty wyświetlacz), jest bardziej wadliwy, niż początkowo przypuszczano. Nie dość, że źle prezentuje wyniki podzielne przez pewną liczbę, to w dodatku resetowanie go jest niesamowitą udręką! Za każdym razem, aby zmienić to, co w danym momencie się wyświetla, należy najpierw wyczyścić całą matrycę, a dopiero później rysować to, co powinno być w tym momencie wyświetlane.
Wyświetlacz składa się z matrycy N × N pikseli. Każdy piksel
może przybrać dwa kolory, biały (oznaczony znakiem kropki
.
) lub czarny (oznaczone znakiem krzyżyka #
).
Resetowanie wyświetlacza polega na zmianie wszystkich pikseli tak, żeby
były czarne. Jednakże, nie da się tego osiągnąć w bezpośredni sposób.
Jedyna możliwość, żeby zmienić to, jak aktualnie świecą się piksele,
jest wybranie pewnego wiersza pikseli oraz pewnej kolumny, a następnie
przerysowanie tego wiersza w danej kolumnie. Rozważmy poniższy przykład
wyświetlacza rozmiaru 3 × 3:
.##
#.#
#..
W tej sytuacji, gdybyśmy wybrali trzeci wiersz, po czym przerysowali go w kolumnie pierwszej, wyświetlacz zmieniłby swój stan do poniższego:
###
..#
...
Gdyby teraz wybrać pierwszy wiersz, a następnie przerysować go w każdej z kolumn, otrzymalibyśmy wyświetlacz cały ustawiony na czarno:
### ### ### ###
..# -> #.# -> ### -> ###
... #.. ##. ###
Okazuje się, że za czyszczenie wyświetlacza (30 razy w każdej sekundzie!) odpowiedzialny jest krasnal Bitek, ukryty pod podłogą sali zawodów (podobnie, jak krasnale sterujące światłami drogowymi, które, jak każdy wie, są ukryte pod jezdnią). Krasnal Bitek ledwo daje radę i bardzo przydałby mu się program, który pomoże mu w czyszczeniu wyświetlacza. Pomóż mu i napisz program, który policzy, ile razy Bitek musi wykonać operację przerysowania, żeby zmienić kolor wszystkich pikseli na czarny.
Wejście
W pierwszym wierszu wejścia znajduje się jedna liczba całkowita N oznaczająca wymiary wyświetlacza.
W następnych N wierszach
następuje opis początkowego stanu wyświetlacza, i-ty wiersz składa się z N znaków kropki .
lub
krzyżyka #
, j-ty
znak opisuje stan j-tego
piksela w i-tym wierszu.
Wyjście
W pierwszym i jedynym wierszu wyjścia należy wypisać jedną liczbę
całkowitą, oznaczającą minimalną liczbę operacji, która wystarczy, aby
wszystkie piksele miały czarny kolor, lub -1
, jeżeli nie
jest to możliwe.
Ograniczenia
1 ≤ N ≤ 1 000.
Podzadania
Podzadanie | Warunki | Punkty |
---|---|---|
1 | W każdej kolumnie jest co najmniej jeden czarny piksel. | 21 |
2 | W każdym wierszu jest co najwyżej jeden biały piksel. | 23 |
3 | N ≤ 50. | 18 |
4 | Brak dodatkowych ograniczeń. | 38 |
Przykład
Wejście | Wyjście | |
|
|
Wejście | Wyjście | |
|
|
Wejście | Wyjście | |
|
|
Dawno, dawno temu, za 111 górami i 111 lasami, w XIV liceum ogólnomagicznym odbywały się warsztaty przygotowujące do II etapu Bajtockiej Olimpiady Bitów i Charów. Na straży szkoły stał Hory Portier, chroniący uczniów przed nadchodzącymi potworami. Do walki z potworami wykorzystuje wyroby magiczne, oferowane mu przez Serwerusa Skype’a.
Hory Portier potrafi zaglądać w przyszłość (dzięki lekcjom z nikim innym jak jedynym Wróżbitą Maciejem), zatem ma dostępny ciąg zdarzeń, które zajdą w przyszłości. Zdarzenia ułożone są chronologicznie od 1 do N-tego. Każde ze zdarzeń jest jednego z dwóch typów:
- Do szkoły podchodzi potwór rodzaju p,
- Serwerus Skype oferuje Horemu Portierowi miksturę rodzaju p, którą Hory Portier może przyjąć lub nie.
Hory Portier doskonale zdaje sobie sprawę, że do walki z potworem rodzaju p wystarczy mu dokładnie jedna mikstura tego samego rodzaju, którą zużywa w trakcie walki. Z drugiej strony, wszystkie mikstury przechowuje w swojej Kanciapie Tajemnic, której to pojemność jest ograniczona. Nie chciałby zatem przechowywać mikstur, które mogłyby okazać się nieprzydatne. Innymi słowy, załóżmy, że w momencie, w którym Hory Portier przechowuje w swojej Kanciapie najwięcej mikstur, jest ich dokładnie K. Hory Portier chciałby, żeby wśród wszystkich możliwych strategii przyjmowania mikstur wybrać taką, że K jest możliwe najmniejsze.
Hory Portier potrafi czarować, ale nie programować, zatem poprosił Cię o pomoc! Mając listę przyszłych wydarzeń oblicz, jaki jest minimalny rozmiar Kanciapy Tajemnic, aby Hory Portier zawsze miał dostępną miksturę przed walką z potworem oraz które z mikstur powinien przyjąć od Serwerusa Skype’a.
Wejście
W pierwszym wierszu wejścia znajduje się jedna liczba całkowita N oznaczająca liczbę przyszłych
wydarzeń. W następnych N
wierszach następuje opis kolejnych zdarzeń, i-te zdarzenie opisane jest przez
jeden znak oraz jedną liczbę ci, pi.
Jeżeli ci
jest równe !
to oznacza, że Hory Portier musi w tym
momencie walczyć z potworem typu pi. Jeżeli ci jest równe
+
, to oznacza, że Serwerus Skype oferuje Horemu Portierowi
miksturę na potwory rodzaju pi.
Wyjście
W pierwszym wierszu wyjścia należy wypisać jedną liczbę całkowitą
K oznaczającą minimalny
potrzebny rozmiar Kanciapy Tajemnic lub jedną liczbę − 1, jeżeli niemożliwe jest wygranie ze
wszystkimi potworami. Jeżeli K ≥ 0, w drugim wierszu należy
wypisać ciąg liczb równych 0 lub 1, oznaczający, które z kolejnych mikstur
Hory Portier przyjmuje od przez Serwerusa Skype’a według kolejności
wydarzeń typu +
na wejściu (0 oznacza nieprzyjęcie, a 1 przyjęcie mikstury). Jeżeli istnieje wiele
możliwości, należy wpisać dowolne z nich.
Ograniczenia
1 ≤ N ≤ 200 000, 1 ≤ pi ≤ N.
Podzadania
W każdym zestawie testowym otrzymasz 50% punktów jeżeli pierwszy wiersz wyjścia będzie poprawny.
Podzadanie | Warunki | Punkty |
---|---|---|
1 | Wszystkie zdarzenia typu +
następują przed wszystkimi typu ! . |
21 |
2 | pi = 1 dla każdego i = 1, …, N. | 26 |
3 | N ≤ 2 000. | 23 |
4 | Brak dodatkowych ograniczeń. | 30 |
Przykład
Wejście | Wyjście | Wyjaśnienie |
|
|
Hory Portier mógłby wziąć wszystkie pierwsze 6 mikstur napotkanych na swojej drodze i już do końca mieć w swoim orężu potrzebne mikstury do walki z potworami. Jednakże, aby oszczędzić miejsce w Kanciapie Tajemnic, mógłby zrezygnować z którejkolwiek mikstury rodzaju 2 oraz z pierwszej napotkanej mikstury rodzaju 4 i przyjąć dopiero następne, które się pojawią, dzięki czemu w najgorszym momencie musi mieć pod ręką 4 mikstury. |
Wejście | Wyjście | |
|
|