제출 #1152377

#제출 시각아이디문제언어결과실행 시간메모리
1152377itslqZagrade (COI20_zagrade)C++20
71 / 100
254 ms3552 KiB
#include <bits/stdc++.h>
using namespace std;

bool query(int l, int r) {
    bool v;
    cout << "? " << l << " " << r << endl;
    cin >> v;
    return v;
}

int main() {
    int N, Q;
    cin >> N >> Q;

    vector<int> ans(N + 5, 0), psum(N + 5, 0);
    map<int, int> memo;
    memo[0] = 0;

    ans[1] = psum[1] = 1;
    ans[N] = -1;

    for (int i = 1; i < N; i++) {
        memo[psum[i] = ans[i] + psum[i - 1]] = i;

        if (ans[i] == 1) {
            if (query(i, i + 1)) {
                ans[i + 1] = -1;
            } else {
                ans[i + 1] = 1;
            }
        } else {
            if (memo.find(psum[i] - 1) != memo.end()) {
                if (query(memo[psum[i] - 1] + 1, i + 1)) {
                    ans[i + 1] = -1;
                } else {
                    ans[i + 1] = 1;
                }
            } else {
                ans[i + 1] = 1;
            }
        }
    }

    cout << "! ";
    for (int i = 1; i <= N; i++) {
        if (ans[i] == 1) cout << "(";
        else cout << ")";
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...