Liệt kê cặp dấu ngoặc

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài

Cho dãy ngoặc đúng gồm ~n~ dấu mở ngoặc ( và ~n~ dấu đóng ngoặc ). Các dấu ngoặc được đánh số thứ tự từ ~1~ đến ~2n~. Hãy liệt kê chỉ số của các cặp dấu mở ngoặc và đóng ngoặc tương ứng.

Dữ liệu vào:

  • Gồm một dòng duy nhất chứa xâu ký tự biểu diễn dãy ngoặc.

Dữ liệu ra:

  • Gồm ~n~ dòng, mỗi dòng gồm hai số ~u, v~ là chỉ số của các cặp ngoặc tương ứng nhau, thứ tự liệt kê tăng dần theo chỉ số của dấu ngoặc đóng.

Input:

()(()())

Output:

1 2
4 5
6 7
3 8

Giới hạn:

  • ~1 ≤ n ≤ 10^5~.

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    22010930  đã bình luận lúc 5, Tháng 12, 2024, 15:13

    include <iostream>

    include <stack>

    include <vector>

    include <utility>

    using namespace std;

    int main() { string input; cin >> input;

    stack<int> s; 
    vector&lt;pair<int, int>> result; 
    
    for (int i = 0; i < input.size(); i++) {
        if (input[i] == '(') {
    
            s.push(i + 1); 
        } else if (input[i] == ')') {
    
            if (!s.empty()) {
                int openIndex = s.top(); 
                s.pop();
                result.push_back({openIndex, i + 1}); 
            }
        }
    }
    
    for (const auto &pair : result) {
        cout << pair.first << " " << pair.second << endl;
    }
    
    return 0;
    

    }