题解:P14083 「CZOI-R7」括号
题解:P14083 「CZOI-R7」括号
::::info[思路]
首先需要理解
接下来,我们注意到,每个括号的编号加上此括号的层数的和如果是偶数,这个括号就是左括号,和是奇数就是右括号。这样我们就能判断出第
还是以
c ( ( ) ( ( ) ) )
id 1 2 3 4 5 6 7 8
f 1 2 2 2 3 3 2 1
sum 2 4 5 6 8 9 9 9
然后就可以开始写代码了,先查出
::::info[代码如下]
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n, p; cin >> n >> p;
printf("? %d %d\n", p, p);
int t; cin >> t;
if((t + p) % 2 == 0)
{
int l = p + 1, r = 2 * n;
while(l < r)
{
int mid = l + (r - l) / 2;
printf("? %d %d\n", l, mid);
fflush(stdout);
int a; cin >> a;
if(a <= t) r = mid;
else l = mid + 1;
if(abs(p - l) % 2 == 0) l++;
if(abs(p - r) % 2 == 0) r--;
}
printf("! %d\n", r);
fflush(stdout);
}
else
{
int l = 1, r = p - 1;
while(l < r)
{
int mid = l + (r - l + 1) / 2;
printf("? %d %d\n", mid, r);
fflush(stdout);
int a; cin >> a;
if(a <= t) l = mid;
else r = mid - 1;
if(abs(p - l) % 2 == 0) l++;
if(abs(p - r) % 2 == 0) r--;
}
printf("! %d\n", l);
fflush(stdout);
}
return 0;
}
::::