Krzysztof Diks, Marcin Kubica |
Tłumaczenie |
Czwarta generacja stacji przekaźnikowych telefonii komórkowej w regionie Tampere działa w następujący sposób. Cały region jest podzielony na kwadraty. Kwadraty tworzą macierz rozmiaru , w której wiersze i kolumny są ponumerowane od 0 do S-1. W każdym kwadracie znajduje się jedna stacja. Liczba aktywnych telefonów wewnątrz każdego kwadratu może się zmieniać, ponieważ telefony mogą przemieszczać się pomiędzy kwadratami oraz być wyłączane lub włączane. Od czasu do czasu, każda stacja przesyła raport o zmianie liczby aktywnych telefonów w jej obszarze wraz z informacją o jej położeniu (wiersz-kolumna w macierzy).
Napisz program, który dostaje te raporty i odpowiada na pytania o aktualną liczbę wszystkich aktywnych telefonów w zadanym prostokątnym obszarze.
Dane wejściowe mają postać liczb całkowitych i są czytane ze standardowego wejścia. Odpowiedzi są wypisywane na standardowe wyjście, również jako liczby całkowite. Format danych wejściowych jest następujący. Każde pojedyncze dane zajmują jeden wiersz i składają się z numeru instrukcji, po którym następują jej parametry (liczby całkowite), zgodnie z następującą tabelką:
llp8cm
Instrukcja & Parametry & Znaczenie
0 & S &
Ustalenie rozmiarów macierzy na i wypełnienie jej
zerami. Instrukcja ta pojawia się tylko raz i zawsze jako pierwsza.
1 & X Y A &
Dodanie A do liczby aktywnych telefonów w kwadracie (X,Y) macierzy.
Wartość A może być dodatnia lub ujemna.
2 & L B R T &
Zapytanie o aktualną, łączną liczbę aktywnych telefonów w kwadratach (X,Y),
dla .
3 & & Zakończenie programu. Instrukcja ta pojawia się tylko raz,
jako ostatnia.
Wszystkie dane wejściowe mieszczą się w podanych zakresach i nie trzeba tego sprawdzać. W szczególności, jeśli A jest ujemne, to możesz założyć, ze liczba telefonów w kwadracie nie spadnie poniżej 0. Numeracja wierszy i kolumn w macierzy zaczyna się od 0, np. dla macierzy , mamy i .
Twój program powinien odpowiadać wyłącznie na instrukcje nr 2. W tym przypadku, powinien on wypisać na standardowe wyjście jeden wiersz zawierający jedną liczbę całkowitą - odpowiedź na zapytanie.
W poniższych przykładach zmienna całkowita last reprezentuje ostatnią liczbę całkowitą wczytaną z wiersza, a answer jest zmienną całkowitą zawierającą odpowiedź.
Jeśli piszesz w C++ i używasz iostreams, powinieneś stosować następującą konwencję wczytywania ze standardowego wejścia i wypisywania na standardowe wyjście:
cin>>last; cout<<answer<<endl<<flush;
Jeśli piszesz w C lub C++ i stosujesz scanf i printf, powinieneś stosować następującą konwencję wczytywania ze standardowego wejścia i wypisywania na standardowe wyjście:
scanf (" printf("
Jeśli piszesz w Pascalu, powinieneś stosować następującą konwencję wczytywania ze standardowego wejścia i wypisywania na standardowe wyjście:
Read(last); ... Readln; Writeln(answer);
llp8cm
stdin & stdout & opis
0 4 & & Ustalenie rozmiaru macierzy na .
1 1 2 3 & & Do kwadratu (1,2) dodaj +3.
2 0 0 2 2 & & Zapytanie dotyczące prostokąta
, .
& 3 & Odpowiedź na zapytanie.
1 1 1 2 & & Do kwadratu (1, 1) dodaj +2.
1 1 2 -1 & & Do kwadratu (1, 2) dodaj -1.
2 1 1 2 3 & &
Zapytanie dotyczące prostokąta
, .
& 4 & Odpowiedź na zapytanie.
3 & & Koniec.
Wymiary macierzy &
&
Wartość w kwadracie V w dowolnym momencie &
V &
Wielkość zmiany &
A &
Liczba instrukcji na wejściu &
U &
Maksymalna łączna liczba telefonów w macierzy &
M &
M=230
Spośród 20 zestawów danych, w 16 rozmiar macierzy nie przekracza .
UWAGA: Program umożliwiający testowanie rozwiązań przez sieć podaje testowanemu programowi na standardowe wejście zawartość Twojego pliku testowego.