| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 (추가 시간 없음) | 1024 MB | 21 | 11 | 10 | 62.500% |
Ciąg składający się z nawiasów otwierających i zamykających nazwiemy nawiasowaniem. Nawiasowanie jest poprawne, jeśli nawiasy można tak połączyć w pary, żeby były poprawnie zagnieżdżone. Definiujemy też głębokość zagnieżdżenia.
Formalnie poprawne nawiasowanie można zdefiniować rekurencyjnie:
Dane są poprawne nawiasowanie w i liczba H. Przez odwrócenie nawiasu rozumiemy zmianę pewnego nawiasu otwierającego na zamykający lub odwrotnie. Ile minimalnie odwróceń nawiasów trzeba wykonać, żeby uzyskać poprawne nawiasowanie o głębokości nie większej niż H?
W pierwszym wierszu wejścia znajdują się dwie liczby całkowite n i H (n ≥ 2, 1 ≤ H ≤ n/2) oznaczające długość ciągu oraz maksymalną głębokość.
W drugim wierszu znajduje się n-literowy napis składający się ze znaków ( i ), będący poprawnym nawiasowaniem.
Twój program powinien wypisać jedną liczbę całkowitą oznaczającą minimalną liczbę odwróceń nawiasów, jakie trzeba wykonać, aby uzyskać poprawne nawiasowanie o głębokości co najwyżej H.
8 2 (()(()))
2
Wyjaśnienie przykładu: Ciąg (()(())) ma głębokość 3. Odwrócenie piątego i szóstego nawiasu da nam ciąg (()()()) o głębokości 2.
Jedno odwrócenie nawiasu nie wystarczy, bo nie uzyskamy w ten sposób poprawnego nawiasowania.