Polish version    English version  
  Historia OI -> V OI 1997/1998 -> Zadania


 Aktualności
 O olimpiadzie
 Komitety
 XVIII OI 2010/2011
 Historia OI
XVII OI 2009/2010
XVI OI 2008/2009
XV OI 2007/2008
XIV OI 2006/2007
XIII OI 2005/2006
XII OI 2004/2005
XI OI 2003/2004
X OI 2002/2003
IX OI 2001/2002
VIII OI 2000/2001
VII OI 1999/2000
VI OI 1998/1999
V OI 1997/1998
Wyniki III etapu
Wyniki II etapu
Wyniki I etapu
Zadania
Regulamin
Terminarz
Statystyki
IV OI 1996/1997
III OI 1995/1996
II OI 1994/1995
I OI 1993/1994
 Książeczki OI
 Reprezentacja
 Obozy Olimpiady
 Galeria zdjęć
 Ciekawe odsyłacze
 OIG LiveCD
 IV OIG 2009/2010
 Historia OIG
 SIO
 MAIN
V Olimpiada Informatyczna 1997/98

Zadanie: PAK
Autor: Wojciech Rytter
Pakowanie kontenerów

II ETAP, PIERWSZY DZIEŃ ZAWODÓW - PIĽTEK 13 LUTEGO 1998 r.  
Plik źródłowy: PAK.??? (np. pas, c, cpp)
Plik wykonywalny: PAK.exe
Plik wejściowy: PAK.in
Plik wyjściowy: PAK.out

Pewna fabryka pakuje swoje wyroby do pudełek, które mają kształt walca. Podstawy wszystkich pudełek są takie same. Wysokość każdego pudełka jest zawsze nieujemną, całkowitą potęgą dwójki, tzn. liczbą postaci 2i, dla pewnego i=0,1,2,... . Liczbę i (wykładnik potęgi), która charakteryzuje wielkość pudełka, nazywamy rozmiarem tego pudełka. We wszystkich pudełkach znajduje się taki sam towar, ale w różnych pudełkach wartość towaru może być różna - towar wyprodukowany wcześniej jest tańszy. Dyrekcja fabryki wydała zarządzenie, żeby starać się wydawać najpierw towar najstarszy, czyli o najmniejszej wartości. Towar jest wywożony z magazynu w kontenerach. Każdy kontener, podobnie jak pudełka, ma kształt walca. Średnica kontenera jest niewiele większa od średnicy pudełek tak, że pudełka można swobodnie umieszczać w kontenerach. Wysokość każdego kontenera jest też nieujemną, całkowitą potęgą dwójki. Podobnie jak w przypadku pudełek, rozmiarem kontenera nazywamy wykładnik tej potęgi. Żeby bezpiecznie przewozić towar w kontenerze, należy go szczelnie wypełnić pudełkami, tzn. suma wysokości umieszczonych w kontenerze pudełek musi być równa wysokości tego kontenera. Do magazynu dostarczono zestaw kontenerów. Sprawdź, czy można pudełkami z magazynu wypełnić szczelnie wszystkie kontenery. Jeśli tak, to podaj minimalną wartość towaru jaki można wywieźć z magazynu w tych, szczelnie wypełnionych, kontenerach.

Przykład

Rozważmy magazyn, w którym znajduje się 5 pudełek o następujących rozmiarach i wartościach przechowywanego w nich towaru:

1 3
1 2
3 5
2 1
1 4
Dwa kontenery o rozmiarach 1 i 2 można szczelnie wypełnić dwoma pudełkami o łącznej wartości 3, 4 lub 5, lub trzema pudełkami o łącznej wartości 9. Kontener o rozmiarze 5 nie da się szczelnie wypełnić pudełkami z magazynu.

Zadanie

Napisz program, który:

  • wczytuje z pliku tekstowego PAK.IN charakterystyki pudełek w magazynie (rozmiar, wartość) oraz charakterystyki kontenerów (ile jest kontenerów danego rozmiaru);
  • sprawdza, czy wszystkie kontenery w zestawie można szczelnie wypełnić pudełkami z magazynu, a jeśli tak, to oblicza minimalną wartość towaru jaką można w tych kontenerach wywieźć z magazynu;
  • zapisuje wynik w pliku tekstowym PAK.OUT.

Wejście

W pierwszym wierszu pliku wejściowego PAK.IN znajduje się liczba całkowita n, 1<=n<=10000. Jest to liczba pudełek w magazynie. W każdym z n kolejnych wierszy zapisane są dwie nieujemne liczby całkowite oddzielone pojedynczym odstępem. Są to charakterystyki jednego pudełka, odpowiednio, rozmiar pudełka i wartość zawartego w nim towaru. Rozmiar pudełka jest nie większy od 1000, natomiast wartość jest nie większa od 10000. W kolejnym wierszu podana jest dodatnia liczba całkowita q określająca, ile różnych rozmiarów mają kontenery dostarczone do magazynu. W każdym z kolejnych q wierszy jest zapisana para dodatnich liczb całkowitych oddzielonych pojedynczym odstępem. Pierwsza z tych liczb jest rozmiarem kontenera, natomiast druga jest liczbą dostarczonych kontenerów o tym rozmiarze. Wiadomo, że maksymalna liczba kontenerów nie przekracza 5000, a rozmiar kontenera jest nie większy od 1000.

Wyjście

Twój program powinien zapisać w pierwszym i jedynym wierszu pliku wyjściowego PAK.OUT:

  • jedno słowo NIE, jeżeli nie da się szczelnie wypełnić pudełkami z magazynu kontenerów z podanego zestawu, lub
  • jedną liczbę całkowitą, której wartość jest równa minimalnej, łącznej wartości towaru z pudełek, którymi można szczelnie wypełnić wszystkie kontenery z podanego zestawu.

Przykład

Dla pliku wejściowego PAK.IN:

5
1 3
1 2
3 5
2 1
1 4
2
1 1
2 1
poprawnym rozwiązaniem jest plik wyjściowy PAK.OUT:
3





Wersja do druku