USACO 2013 - Typo
Xem PDFBessie vừa mua một chiếc máy tính xách tay mới, nhưng đáng tiếc là cô không thể gõ thành thạo vì móng guốc lớn của cô quá cỡ so với bàn phím nhỏ. Bessie vừa thử gõ một trong những mẫu yêu thích của mình — một chuỗi dấu ngoặc cân bằng. Tuy nhiên, cô nhận ra rằng mình có thể đã gõ nhầm một ký tự, vô tình thay ( bằng ) hoặc ngược lại. Hãy giúp Bessie tính số vị trí trong chuỗi sao cho việc đảo dấu ngoặc duy nhất tại vị trí đó sẽ làm cho toàn bộ chuỗi trở nên cân bằng.
Có nhiều cách để định nghĩa thế nào là một chuỗi dấu ngoặc "cân bằng". Có lẽ định nghĩa đơn giản nhất là tổng số dấu ( phải bằng tổng số dấu ), và trong mọi tiền tố của chuỗi, số dấu ( phải không ít hơn số dấu ). Ví dụ, các chuỗi sau đều cân bằng:
()
(())
()(()())
trong khi các chuỗi sau thì không:
)(
())(
((())))
Dữ liệu vào
- Dòng 1 chứa một chuỗi dấu ngoặc có độ dài \(N\) (\(1 \le N \le 100\,000\)).
Dữ liệu ra
- Dòng 1 chứa số vị trí trong chuỗi đầu vào (nếu có) sao cho việc đảo dấu ngoặc tại riêng vị trí đó sẽ làm cho toàn bộ chuỗi trở nên cân bằng.
Ví dụ
Ví dụ 1
Input
()(())))
Output
4
Giải thích
Nếu quan sát kỹ chuỗi đầu vào:
12345678
()(())))
ta thấy rằng đảo chiều dấu ngoặc ở vị trí 2 tạo ra một chuỗi cân bằng:
12345678
(((())))
Tương tự, đảo dấu ngoặc ở vị trí 5, vị trí 6 hoặc vị trí 7 cũng tạo ra một chuỗi cân bằng.
Nguồn
USACO 2012 November Contest, Bronze — Problem 2: Typo
Tác giả đề: Brian Dean, 2012.
Kỳ thi:
- USACO 2012 - Tháng 11 - Hạng Đồng (1 Tháng 11., 2012)
Bình luận