#include <iostream>
#include <string>
using namespace std;
int main()
{
int n, q; cin >> n >> q;
int L[n + 2], R[n + 2];
for(int i = 0; i <= n + 1; ++i) L[i] = i - 1, R[i] = i + 1;
string ans(n, ' ');
int cnt = n;
while(1)
{
bool flag = false;
int pt = R[0];
while(pt < n + 1)
{
int pt1 = R[pt];
int pt2 = R[R[pt]];
cout << "? " << pt << ' ' << pt1 << endl; cout.flush();
int t; cin >> t;
if(t)
{
flag = true;
L[R[pt]] = L[pt];
R[L[pt]] = R[pt];
L[R[pt1]] = L[pt1];
R[L[pt1]] = R[pt1];
ans[pt - 1] = '(';
ans[pt1 - 1] = ')';
cnt -= 2;
}
pt = pt2;
}
pt = R[R[0]];
while(pt < n + 1 && R[pt] < n + 1)
{
int pt1 = R[pt];
int pt2 = R[R[pt]];
cout << "? " << pt << ' ' << pt1 << endl; cout.flush();
int t; cin >> t;
if(t)
{
flag = true;
L[R[pt]] = L[pt];
R[L[pt]] = R[pt];
L[R[pt1]] = L[pt1];
R[L[pt1]] = R[pt1];
ans[pt - 1] = '(';
ans[pt1 - 1] = ')';
cnt -= 2;
}
pt = pt2;
}
if(!flag)
{
int cnt2 = 0;
for(auto &c : ans) if(c == ' ')
{
if(cnt2 < cnt / 2) ++cnt2, c = ')';
else c = '(';
}
break;
}
}
cout << ans << endl; cout.flush();
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
200 KB |
Incorrect query () |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
200 KB |
Incorrect query )( |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
200 KB |
Incorrect |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
200 KB |
Incorrect query ))(( |
2 |
Halted |
0 ms |
0 KB |
- |