Submission #1003974

#TimeUsernameProblemLanguageResultExecution timeMemory
1003974vjudge1Zagrade (COI20_zagrade)C++17
71 / 100
587 ms1524 KiB
#include<bits/stdc++.h>
using namespace std;

//cout.flush();
const int MAXN=100010;
int resp[MAXN];

int main(){
	int n, q;
	cin >> n >> q;
	cout << "? 1 " << n << endl;
	//std::cout << std::flush;

	int ehVal;
	cin >> ehVal;

	if(ehVal){
		resp[1] = 1;
		int a = 1, f = 0;
		stack <int> s;
		s.push(1);
		int l = 1;
		for(int i=2; i<n; i++){
			if(l==0){
				a++;
				resp[i] = 1;
				s.push(i);
				l = i;
				continue;
			}
			cout << "? " << l << " " << i << endl;
			//std::cout << std::flush;
			int val;
			cin >> val;
			if(val){
				f++;
				resp[i] = 2;
				s.pop();
				if(s.empty()) l = 0;
				else l = s.top();
			}
			else{
				a++;
				resp[i] = 1;
				s.push(i);
				l = i;
			}
		}

		resp[n] = 2;

		cout << "! ";
		for(int i=1; i<=n; i++){
			if(resp[i]==1) cout << "(";
			else cout << ")";
		}
		return 0;
	}
	int a= 0, b = 0;

	for(int i=1; i<=n; i++){
		for(int j=i+1; j<=n; j++){
			if((j-i)%2==0) continue;
			cout << "? " << i << " " << j << endl;
			int val;
			cin >> val;
			if(val){
				resp[i] = 1;
				resp[j] = 2;
				a++; b++;
			}
		}
	}

	for(int i=1; i<=n; i++){
		if(resp[i]==0){
			if(b==n/2){
				resp[i] = 1;
				a++;
			}
			else{
				resp[i] = 2;
				b++;
			}
		}
	}

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

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...