Submission #1223489

#TimeUsernameProblemLanguageResultExecution timeMemory
1223489iulia_morariuZagrade (COI20_zagrade)C++20
100 / 100
224 ms924 KiB
#include <algorithm>
#include <iostream>
#include <fstream>
#include <climits>
#include <vector>
#include <stack>
#include <cmath>
#include <stack>
// #include <bits/stdc++.h>
#define in  cin
#define out cout

using namespace std;

string s;
vector<int> rez;

void explore(int p){
    // p si p + 1 sunt ()
    for(int i = p - 1; i > 0; i--){
        if(s[i] != '.') break;
        if(s[i + 1] == '(' && rez[i] == 0) break; // nu mai chiar pot face ceva
        if(s[i + 1] == ')' && rez[i] == 0){
            s[i] = ')'; continue;
        }
        if(s[i + 1] == ')' && rez[i] == 1){
            s[i] = '('; continue;
        }
    }

    for(int i = p + 2; i < s.size(); i++){
        if(s[i] != '.') break;
        if(s[i - 1] == ')' && rez[i] == 0) break; // nu mai chiar pot face ceva
        if(s[i - 1] == '(' && rez[i] == 0){
            s[i] = '('; continue;
        }
        if(s[i - 1] == '(' && rez[i] == 1){
            s[i] = ')'; continue;
        }
    }
}

void explore_final(int p){
    for(int i = p - 1; i > 0; i--){
        if(s[i] != '.') break;
        if(s[i + 1] == '(' && rez[i] == 0){
            s[i] = '('; continue;
        }
        if(s[i + 1] == ')' && rez[i] == 0){
            s[i] = ')'; continue;
        }
        if(s[i + 1] == ')' && rez[i] == 1){
            s[i] = '('; continue;
        }
    }
    for(int i = p + 2; i < s.size(); i++){
        if(s[i] != '.') break;
        if(s[i - 1] == ')' && rez[i] == 0){
            s[i] = ')'; continue;
        }
        if(s[i - 1] == '(' && rez[i] == 0){
            s[i] = '('; continue;
        }
        if(s[i - 1] == '(' && rez[i] == 1){
            s[i] = ')'; continue;
        }
    }
}

signed main(){

    int n, q; in >> n >> q;

    // ideea precedenta nu imi prindea cazuri de genu ))()(( -_-

    stack<int> st;

    st.push(0);
    s.resize(n);
    for(int i = 1; i < n; i++){
        if(st.empty()){
            st.push(i); continue;
        }
        cout << "? " << st.top() + 1 << " " << i + 1 << endl; // ca gen s-o inchis totul dintre ele (teoretic)
        int x; in >> x;
        if(x == 1){
            // yaay se inchid
            s[st.top()] = '(';
            s[i] = ')';
            st.pop();
        }else st.push(i);
    }

    // si e n - 1 pt ca fac cate 1 queri / i de la i la 1 la n - 1

    int sz = st.size() / 2; // ce o ramas este ))..)(..((
    while((int)st.size() > sz){
        s[st.top()] = '(';
        st.pop();
    }
    while(!st.empty()){
        s[st.top()] = ')';
        st.pop();
    }
    out << "! " << s << endl;

    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...