시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 35 | 2 | 2 | 9.091% |
Słowem nawiasowym będziemy nazywali słowo złożone z dwóch rodzajów znaków: nawiasów otwierających, czyli "(", oraz nawiasów zamykających, czyli ")". Wśród wszystkich słów nawiasowych będziemy wyróżniać poprawne wyrażenia nawiasowe. Są to takie słowa nawiasowe, w których występujące nawiasy można połączyć w pary w taki sposób, że:
Na słowie nawiasowym można wykonywać operacje:
Na pewnym słowie nawiasowym wykonywane są kolejno operacje zamiany lub sprawdzenia.
Napisz program, który:
W pierwszym wierszu wejścia znajduje się jedna liczba całkowita n (1 ≤ n ≤ 30000) oznaczająca długość słowa nawiasowego. W drugim wierszu znajduje się n nawiasów bez znaków odstępu między nimi. W trzecim wierszu znajduje się jedna liczba całkowita m (1 ≤ m ≤ 1000000) oznaczająca liczbę operacji wykonywanych na słowie nawiasowym. W każdym z kolejnych m wierszy znajduje się jedna liczba całkowita. Jeśli w (k + 3)-wierszu (dla 1 ≤ k ≤ m) występuje liczba 0, to znaczy, że k-tą z kolei operacją wykonywaną na słowie nawiasowym jest operacja sprawdzenia. Jeśli zaś jest to liczba całkowita p spełniająca 1 ≤ p ≤ n, to znaczy, że operacją tą jest operacja zamiany p-tego nawiasu na przeciwny.
Twój program powinien wypisać w kolejnych wierszach (standardowego wyjścia) wyniki kolejnych operacji sprawdzenia. Jeśli bieżące słowo nawiasowe jest poprawnym wyrażeniem nawiasowym, to należy wypisać słowo TAK
, w przeciwnym przypadku słowo NIE
. (Na wyjściu powinno pojawić się tyle wierszy, ile operacji sprawdzenia zadano na wejściu.)
4 () (( 4 4 0 2 0
TAK NIE
Contest > Algorithmic Engagements > PA 2003 4-2번