RICEHUB Silos Ryżowy (Rice Hub)

Transkrypt

RICEHUB Silos Ryżowy (Rice Hub)
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 1
RICEHUB
Polish 1.4
Silos Ryżowy (Rice Hub)
Rzecz dzieje się na długiej, prostej drodze, zwanej Drogą Ryżową. Wzdłuż tej drogi
rozmieszczonych jest R pól ryżowych. Położenie każdego z tych pól jest określone jedną
współrzędną – liczbą całkowitą, mieszczącą się w zakresie od 1 do L. Pola ryżowe są podane w
kolejności niemalejących współrzędnych. Formalnie, dla 0 ≤ i < R, pole ryżowe o numerze i ma
współrzędną X[i], przy czym 1 ≤ X[0] ≤ ... ≤ X[R-1] ≤ L.
Może zdarzyć się, że wiele pól ryżowych będzie miało tę samą współrzędną.
Planujemy budowę jednego silosu ryżowego, w którym będziemy przechowywać możliwie dużo
zebranego ryżu. Podobnie jak w przypadku pól ryżowych, silos ryżowy jest wyznaczony przez
całkowitoliczbową współrzędną z zakresu od 1 do L. Silos ryżowy może być położony w
dowolnym miejscu, w szczególności na takiej samej współrzędnej jak jedno lub wiele pól
ryżowych.
Z każdego pola ryżowego można co roku zebrać dokładnie jedną ciężarówkę ryżu. Miasto planuje
zatrudnienie kierowcy do przewozu ryżu do silosu. Kierowca pobiera opłatę 1 bata za każdą
jednostkę odległości przebytą w kierunku silosu. Innymi słowy, koszt transportu jednej ciężarówki
ryżu z danego pola do silosu jest równy różnicy między ich współrzędnymi.
Niestety nasz budżet w tym roku jest napięty: możemy wydać jedynie B batów na przewóz ryżu.
Twoim zadaniem jest pomóc nam tak umieścić silos, by przewieźć do niego jak najwięcej ryżu.
Zadanie
Zaimplementuj procedurę besthub(R,L,X,B). Jej parametry to:
 R – liczba pól ryżowych. Pola ryżowe ponumerowane są liczbami od 0 do R-1.
 L – maksymalna wielkość współrzędnych.
 X – jednowymiarowa tablica liczb całkowitych, uporządkowana w kolejności niemalejącej.
Dla każdego 0 ≤ i < R, pole ryżowe numer i ma współrzędna X[i].
 B – wielkość budżetu.
Twoja procedura ma za zadanie znaleźć optymalną lokalizację silosu i zwrócić maksymalną liczbę
ciężarówek ryżu, które mogą być do niego przewiezione.
Zauważ, że całkowity koszt przewozu ryżu może być bardzo duży. Budżet podany jest jako 64bitowa liczba całkowita, dlatego zalecamy wykonywanie obliczeń na 64-bitowych liczbach
całkowitych. W C/C++ używaj typu long long, zaś w Pascalu – typu Int64.
Page 1 of 3
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 1
RICEHUB
Polish 1.4
Przykład
Rozważmy przypadek, gdy R=5, L=20, B=6 oraz
1
2
X= 10
12
14
W tym przypadku istnieje wiele optymalnych lokalizacji silosu: może on być ulokowany na
dowolnej współrzędnej o wartości pomiędzy 10 a 14. Powyższy rysunek pokazuje jedną z takich
optymalnych lokalizacji silosu. Będziemy wtedy mogli przewieźć do niego ryż z pól o
współrzędnych 10, 12 i 14. Dla każdej takiej optymalnej lokalizacji silosu, łączny koszt przewozu
ryżu nie przekroczy wtedy sześciu batów. Oczywiście żadna inna lokalizacja silosu nie umożliwi
przewozu ryżu z więcej niż trzech pól i dlatego to rozwiązanie jest optymalne. Procedura besthub
powinna więc zwrócić 3.
Podzadania
Podzadanie 1. (17 punktów)
 1 ≤ R ≤ 100
 1 ≤ L ≤ 100
 0 ≤ B ≤ 10 000
Podzadanie 3. (26 punktów)
 1 ≤ R ≤ 5 000
 1 ≤ L ≤ 1 000 000
 0 ≤ B ≤ 2 000 000 000
 Żadne dwa pola nie mają tej samej
współrzędnej (tylko w tym podzadaniu)
Podzadanie 2. (25 punktów)
 1 ≤ R ≤ 500
 1 ≤ L ≤ 10 000
 0 ≤ B ≤ 1 000 000
Podzadanie 4. (32 punkty)
 1 ≤ R ≤ 100 000
 1 ≤ L ≤ 1 000 000 000
 0 ≤ B ≤ 2 000 000 000 000 000
Page 2 of 3
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 1
RICEHUB
Polish 1.4
Szczegóły techniczne
Ograniczenia
 Limit czasu procesora: 1 sekunda
 Dostępna pamięć: 256 MB
Uwaga: Nie ma osobnego ograniczenia na rozmiar stosu. Pamięć użyta przez stos wlicza się
w całkowity rozmiar używanej pamięci.
Interfejs (API)





Katalog na pliki źródłowe: ricehub/
Nazwa pliku z rozwiązaniem: ricehub.c lub ricehub.cpp lub ricehub.pas
Interfejs procedur zawodnika: ricehub.h lub ricehub.pas
Przykładowy moduł oceniający: grader.c lub grader.cpp lub grader.pas
Pliki wejściowe dla przykładowego modułu oceniającego: grader.in.1, grader.in.2, ...
Uwaga: Przykładowy moduł oceniający wczytuje dane zgodnie z poniższym formatem:
 Wiersz 1: R, L oraz B.
 Wiersze od 2 do R+1: informacje o lokalizacji pól ryżowych; wiersz i+2 zawiera
liczbę X[i], dla 0 ≤ i < R.
 Wiersz R+2: oczekiwana odpowiedź.
 Pliki z oczekiwaną odpowiedzią dla przykładowych wejść przykładowego modułu
oceniającego: grader.expect.1, grader.expect.2, ...
W tym zadaniu powyższe pliki powinny zawierać jedynie napis „Correct.”
Page 3 of 3

Podobne dokumenty