Submission #1223482

#TimeUsernameProblemLanguageResultExecution timeMemory
1223482iulia_morariuZagrade (COI20_zagrade)C++20
0 / 100
2393 ms904 KiB
#include <algorithm>
#include <iostream>
#include <fstream>
#include <climits>
#include <vector>
#include <stack>
#include <cmath>
// #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;

    int p = 0;
    rez.resize(n);
    s.resize(n + 1);
    for(int i = 1; i + 1 <= n; i++){
        s[i] = s[i + 1] = '.';
        cout << "? " << i << " " << i + 1 << endl;
        in >> rez[i];
        if(rez[i] == 1) p = i;
    }

    for(int i = 1; i + 1 <= n; i++){
        if(rez[i] == 1){
            s[i] = '('; s[i + 1] = ')';
            explore(i);
        }
    }

    for(int i = 1; i <= n; i++){
        if(s[i] == '.') continue;
        explore_final(i);
    }
    s.erase(s.begin());

    cout << "! " << 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...