Cộng và trừ
Đề bài
Mô tả
Cho một xâu chỉ gồm các ký tự + và -. Ta thực hiện quá trình sau:
res = 0
for init = 0, 1, 2, ...:
cur = init
ok = true
for i = 1 to |s|:
res = res + 1
if s[i] == '+': cur = cur + 1
else: cur = cur - 1
if cur < 0:
ok = false
break
if ok: break
output res
Nói cách khác, ta thử lần lượt các giá trị khởi tạo . Với mỗi , ta duyệt xâu từ trái sang phải, cộng/trừ vào biến theo từng ký tự. Mỗi bước duyệt (dù thành công hay không) đều làm tăng . Nếu trong quá trình duyệt trở nên âm thì dừng ngay vòng trong và thử lớn hơn; nếu duyệt hết xâu mà không bao giờ âm thì kết thúc.
Hãy tính giá trị cuối cùng của .
Dữ liệu vào
- Dòng đầu chứa số nguyên — số bộ dữ liệu.
- Mỗi bộ dữ liệu là một dòng chứa xâu chỉ gồm các ký tự
+và-.
Dữ liệu ra
Với mỗi bộ dữ liệu, in ra trên một dòng giá trị cuối cùng.
Ràng buộc
- Tổng trên tất cả các bộ dữ liệu không vượt quá .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 --+- --- ++--+- |
7 9 6 |
Bộ 1 (--+-): với dừng sau bước 1 (); dừng sau bước 2 (); duyệt hết 4 bước (). Bộ 3 (++--+-): đã đủ vì không bao giờ âm, . |
| 15 - -- + +- - + - + - -+ -+ -+ -+ -+ -+ |
2 5 1 2 2 1 2 1 2 3 3 3 3 3 3 |
Mỗi xâu được xử lý độc lập. Với xâu -- cần , các lần thử lần lượt mất bước, tổng . |
Bình luận