BOI 2005 - Magic Parenthesis

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1800 Thời gian: 5.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Trong ngôn ngữ lập trình LISP, mọi thứ được viết bên trong các cặp ngoặc cân bằng. Vì vậy mã LISP đôi khi có những đoạn rất dài chỉ gồm dấu ngoặc đóng ), và việc viết đúng số lượng dấu ngoặc này khá phiền toái.

Để tránh lỗi cú pháp, một số phương ngữ LISP có dấu ngoặc đóng ma thuật ], thay cho một hoặc nhiều dấu ) sao cho các dấu ( được cân bằng đúng. Hãy xác định số dấu ) mà mỗi dấu ] thay thế. Nếu có nhiều đáp án, được phép in bất kỳ đáp án nào.

Dữ liệu vào

Dòng đầu gồm hai số nguyên \(N, M\) (\(0 \le N \le 10\,000\,000\), \(0 \le M \le 5\,000\,000\)), lần lượt là độ dài xâu và số dấu ngoặc ma thuật.

Phần còn lại của tệp, bắt đầu từ dòng thứ hai, là một xâu dài \(N\) chỉ gồm (, )]; ký tự ] xuất hiện đúng \(M\) lần. Để dễ đọc, xâu được chia thành các dòng, mỗi dòng không quá \(72\) ký tự.

Dữ liệu ra

Dòng đầu in 0 hoặc 1.

Nếu không thể cân bằng xâu, in 0 và không in thêm gì.

Nếu có thể cân bằng, in 1, sau đó in thêm đúng \(M\) dòng. Dòng thứ \(i\) chứa số nguyên \(C_i \ge 1\), là số dấu ) mà dấu ] thứ \(i\) trong xâu thay thế.

Ví dụ

Ví dụ 1

Input
8 2
(((((])]
Output
1
3
1
Giải thích

Dấu ngoặc ma thuật thứ nhất thay cho ba dấu ), dấu thứ hai thay cho một dấu ). Xâu nhận được là một xâu ngoặc cân bằng.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: