#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> ii;
int main(){
int n, q, check;
vector<ii> paired;
cin>>n>>q;
int ptr=1;
int counter=0;
stack<int> singlepos;
while(ptr<n+1){
if(ptr==n){
ptr++;
continue;
}
cout<<"? "<<ptr<<' '<<ptr+1<<endl;
cin>>check;
if(check==0){
singlepos.push(ptr);
++ptr;
}else{
int last = ptr;
ptr+=2;
paired.push_back(ii(last,ptr-1));
while(check==1){
if(singlepos.empty()) break;
cout<<"? "<<singlepos.top()<<' '<<ptr<<endl;
cin>>check;
if(check==1){
last=singlepos.top();
singlepos.pop();
ptr++;
paired.push_back(ii(last,ptr-1));
}
}
}
}
sort(paired.begin(),paired.end());
vector<char> ans(n+1,'_');
int unknowns = n;
for(auto x : paired){
int s = x.first;
int e = x.second;
ans[s] = '(';
ans[e] = ')';
unknowns-=2;
}
unknowns/=2;
int cnt = 0;
for(int i=0;i<n;++i){
if(ans[i+1]=='_'){
cnt++;
if(cnt<=unknowns){
ans[i+1] = ')';
}else{
ans[i+1] = '(';
}
}
}
cout<<"! ";
for(int i = 0; i < n; ++i){
cout<<ans[i+1];
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |