RACE Wyścig (Race)

Transkrypt

RACE Wyścig (Race)
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 1
RACE
Polish 1.3
Wyścig (Race)
W tym roku, równolegle do IOI, w Pattaya odbędzie się Międzynarodowy Wyścig Samochodowy
(MWS) 2011. Obowiązkiem organizatorów jest wytyczenie jak najlepszej trasy wyścigu.
W regionie Pattaya-Chonburi leży N miast połączonych siecią N-1 autostrad. Każda autostrada jest
dwukierunkowa, łączy dwa różne miasta, a jej długość w kilometrach wyraża się liczbą całkowitą.
Dodatkowo, istnieje dokładnie jedna ścieżka łącząca każdą parę miast. Innymi słowy, pomiędzy
każdą parą miast istnieje dokładnie jedna trasa składająca się z ciągu autostrad, która nie przebiega
dwukrotnie przez żadne miasto.
Regulamin MWS mówi, że trasa wyścigu powinna być ścieżką o długości dokładnie K kilometrów
i powinna się zaczynać i kończyć w różnych miastach. Aby uniknąć wypadków, trasa nie może
dwukrotnie przebiegać po żadnej autostradzie (ani przez żadne miasto). Wyścig może spowodować
utrudnienia w ruchu, dlatego jego trasa powinna składać się z jak najmniejszej liczby autostrad.
Zadanie
Zaimplementuj procedurę best_path(N,K,H,L). Jej parametry to:
 N – liczba miast. Miasta są ponumerowane liczbami od 0 do N-1.
 K – długość trasy.
 H – dwuwymiarowa tablica opisująca autostrady. Dla 0 ≤ i < N-1, autostrada i łączy miasta
H[i][0] oraz H[i][1].
 L – jednowymiarowa tablica opisująca długości autostrad. Dla 0 ≤ i < N-1, długością
autostrady i jest L[i].
Możesz założyć, że wszystkie wartości w tablicy H zawierają się w przedziale [0, N-1] oraz że
autostrady łączą wszystkie miasta w sposób opisany powyżej. Ponadto, wartości w tablicy L są
liczbami całkowitymi z przedziału [0, 1 000 000].
Twoja procedura powinna zwracać najmniejszą możliwą liczbę autostrad, z których może składać
się poprawna trasa o długości dokładnie K. Jeśli taka trasa nie istnieje, Twoja procedura powinna
zwrócić -1.
Page 1 of 4
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 1
RACE
Polish 1.3
Przykłady
Przykład 1.
Rozważmy przykład z rysunku numer 1, gdzie N=4, K=3,
01
H= 1 2
13
1
L= 2
4
Wyścig może zacząć się w mieście numer 0 i prowadzić przez miasto
numer 1 do miasta numer 2. Trasa będzie miała długość 1 km + 2 km =
3 km i składać się będzie z dwu autostrad. Jest to najlepsza możliwa
trasa wyścigu, dlatego best_path(N,K,H,L) powinno zwrócić 2.
Rysunek 1.
Przykład 2.
Rozważmy przykład z rysunku numer 2, gdzie N=3, K=3,
H=
01
12
L=
1
1
Nie istnieje poprawna trasa wyścigu. W tym przypadku best_path(N,K,H,L)
powinno zwrócić -1.
Rysunek 2.
Przykład 3.
Rozważmy przykład z rysunku numer 3, gdzie N=11,
K=12,
0
0
2
3
4
H=
0
6
6
8
8
1
2
3
4
5
6
7
8
9
10
3
4
5
4
6
L=
3
2
5
6
7
Rysunek 3.
Page 2 of 4
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 1
RACE
Polish 1.3
Jedna z możliwych tras składa się z 3 autostrad: z miasta 6, przez miasta 0 i 2 do miasta 3. Można
też poprowadzić trasę z miasta 10, przez miasto 8 do miasta 6. Obydwie trasy wyścigu mają
długość 12 km, zgodnie z wymaganiami. Druga z nich jest optymalna, bo nie istnieje trasa
składająca się z jednej autostrady. Zatem best_path(N,K,H,L) powinno zwrócić 2.
Podzadania
Podzadanie 1. (9 punktów)
 1 ≤ N ≤ 100
 1 ≤ K ≤ 100
 Sieć drogowa tworzy linię, tj. dla 0 ≤ i < N-1, autostrada i łączy miasta i oraz i+1.
Podzadanie 2. (12 punktów)
 1 ≤ N ≤ 1 000
 1 ≤ K ≤ 1 000 000
Podzadanie 3. (22 punkty)
 1 ≤ N ≤ 200 000
 1 ≤ K ≤ 100
Podzadanie 4. (57 punktów)
 1 ≤ N ≤ 200 000
 1 ≤ K ≤ 1 000 000
Szczegóły techniczne
Ograniczenia
 Limit czasu procesora: 3 sekundy
 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: race/
 Nazwa pliku z rozwiązaniem: race.c lub race.cpp lub race.pas
 Interfejs procedur zawodnika: race.h lub race.pas
 Interfejs procedur modułu oceniającego: race.h lub racelib.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, ...
Page 3 of 4
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 1
RACE
Polish 1.3
Uwaga: Przykładowy moduł oceniający wczytuje dane zgodnie z poniższym formatem:
 Wiersz 1: N oraz K.
 Wiersze od 2 do N: opis autostrad; wiersz i+2 (dla 0 ≤ i < N-1) zawiera liczby
H[i][0], H[i][1] oraz L[i] oddzielone pojedynczym odstępem.
 Wiersz N+1: 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 4 of 4