Filatelista, ASD0809B

background image

SPOJ Problem Set (main)

4243. Filatelista

Problem code: ASD0809B

Jaś jest zapalonym filatelistą. Ponieważ jego kolekcja przekroczyła masę krytyczną i nie jest już w
stanie jej ogarnąć, prosi Cię o pomoc. Twoim zadaniem jest napisanie programu do zarządzania
kolekcją znaczków Jasia. Każdy rodzaj znaczka jest identyfikowany jednoznacznie przez jego numer
serii (ciąg dużych liter i cyfr). Jaś może mieć więcej niż jeden znaczek z danej serii (np. na wymianę).
Kolekcja nieustannie rozwija się. Jaś kupuje, sprzedaje i wymienia znaczki - program powinien zatem
umożliwiać te operacje. Od czasu do czasu chce też nacieszyć się stanem swojego posiadania, więc
program powinien umożliwiać wypisanie zawartości całej, lub części, kolekcji.

Wejście i wyjście

Na wejściu programu zostanie podany ciąg poleceń (każde w osobnej linii) o jednej z następujących
postaci:

KUP nrserii ile - oznacza zakup ile znaczków o numerze serii nrserii (należy je dodać do
kolekcji)
ILE nrserii - zapytanie o ilość znaczków o numerze serii nrserii w kolekcji; program powinien
wypisać jedną liczbę nieujemną (zero gdy nie ma ich w kolekcji) oraz znak nowej linii
SPRZEDAJ nrserii ile - oznacza sprzedaż ile znaczków o numerze serii nrserii (należy je usunąć
z kolekcji); gdy ile jest większe od liczby posiadanych przez Jasia znaczków danej serii należy
wypisać BLAD<nowa-linia>, nie usuwać niczego i kontynuować przetwarzanie poleceń
WYMIEN nrserii1 nrserii2 - oznacza zamianę jednego znaczka o numerze serii nrserii1 (ten
Jasio oddaje) na znaczek o numerze serii nrserii2 (ten Jasio dostaje); gdy Jasio nie posiada
znaczka o numerze serii nrserii1, należy wypisać BLAD<nowa-linia>, nie modyfikować
zawartości kolekcji i kontynuować przetwarzanie poleceń
WYPISZ - wypisanie kolekcji w formacie:
nrserii-1

ilość-1

nrserii-2

ilość-2

...
nrserii-n

ilość-n

gdzie nrserii-i to uporządkowane alfabetycznie numery serii znaczków zaś ilość-i to liczba
posiadanych przez Jasia znaczków o numerze serii nrserii-i (należy wypisać tylko te, które Jasio
posiada, więc nie może pojawić się linia zawierająca ilość <= 0
WYPISZTYLKO prefiks - wypisanie tej części kolekcji, która zawiera znaczki o numerach serii
zaczynających się od napisu prefiks w formacie:
nrserii-1

ilość-1

nrserii-2

ilość-2

...
nrserii-n

ilość-n

gdzie nrserii-i to uporządkowane alfabetycznie numery serii znaczków zaś ilość-i to liczba
posiadanych przez Jasia znaczków o numerze serii nrserii-i (należy wypisać tylko te, które Jasio
posiada, więc nie może pojawić się linia zawierająca ilość <= 0
DRZEWO - wypisanie drzewa czerwono-czarnego zawierającego kolekcję w formacie:

1

background image

( spacja lewy-syn spacja kolor spacja nrserii spacja ilość spacja prawy-syn spacja ) gdzie nrserii
i ilość to zawartość węzła, kolor to kolor węzła (R gdy czerwone, B gdy czarne) zaś lewy-syn i
prawy-syn

to opis lewego lub prawego poddrzewa w takim samym formacie lub () (nawias

otwierający

nawias zamykający) gdy odpowiednie poddrzewo jest puste. Np:

( () B BOND007 1 ( () R BOREWICZ07 2 () ) )

(należy zwrócić szczególną uwagę na umieszczenie w odpowiednich miejscach białych znaków).

Testy

Za implementację wszystkich komend, poza DRZEWO (testy nr. 1-7) można uzyskać 5 pkt
(dopuszczalna jest implementacja przy użyciu innej struktury, o ile zmieści się w czasie). Za
implementację wszystkich komend otrzymuje się 9 pkt. Kolejne testy sprawdzają następujące rzeczy:

Test 1 (0.5 pkt.) - małe dane, polecenia KUP, i WYPISZ
Test 2 (0.5 pkt.) - małe dane, polecenia KUP, ILE i WYPISZ
Test 3 (0.5 pkt.) - małe dane, polecenia KUP, ILE, SPRZEDAJ i WYPISZ
Test 4 (0.5 pkt.) - małe dane, polecenia KUP, ILE, SPRZEDAJ, WYMIEN i WYPISZ
Test 5 (1 pkt.) - małe dane, polecenia KUP, ILE, SPRZEDAJ, WYMIEN, WYPISZTYLKO i
WYPISZ
Test 6 (1 pkt.) - duże dane, polecenia KUP, ILE, SPRZEDAJ, WYMIEN, WYPISZTYLKO i
WYPISZ
Test 7 (1 pkt.) - duże dane, polecenia KUP, ILE, SPRZEDAJ, WYMIEN, WYPISZTYLKO i
WYPISZ
Test 8 (4 pkt.) - wszystko (duże dane, polecenia KUP, ILE, SPRZEDAJ, WYMIEN, WYPISZ,
WYPISZTYLKO i DRZEWO)

Język

Zadanie należy zaimplementować w języku C.

Przykład

Wejście

KUP BOND007 1

KUP BOREWICZ07 2

KUP SUPERMAN 3

WYMIEN BOREWICZ07 AGENTAS

ILE BOREWICZ07

ILE KAJMANY

WYPISZ

DRZEWO

WYPISZTYLKO B

Wyjście

2

background image

1

0

AGENTAS 1

BOND007 1

BOREWICZ07 1

SUPERMAN 3

( ( ( () R AGENTAS 1 () ) B BOND007 1 () ) B BOREWICZ07 1 ( () B SUPERMAN 3 () ) )

BOND007 1

BOREWICZ07 1

Dodatkowe testy
6,7,8 - wszystkie możliwe sposoby tworzenia i usuwania (po jednym węźle) drzew o n=6,7,8
rand - ciąg losowych operacji

Added by:

Krzysztof M. Ocetkiewicz

Date:

2009-04-21

Time limit: 1s
Source limit:50000B
Languages: C C99 strict DOC PDF PS

3


Wyszukiwarka

Podobne podstrony:
3 7 Filatelistyka
Niemiecko polski słownik filatelistyczny

więcej podobnych podstron