F1. Guess the K-th Zero (Easy version)
题目传送门:
题面:
题目大意:
给定01数组的长度,利用不超过20次的查询来找到第k个0的位置。与困难版本的区别在于,在简单版本中,我们只需要找一个k。
交互题,每次可以询问某区间的和,输入"? l r"返回这个区间和,要在20次内找到第k个0
思路:
二分去找。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, t;
cin >> n >> t;
int k;
cin >> k;
int l = 0, r = n + 1;
while (l + 1 < r) {
int mid = (l + r) / 2;
cout << "? " << 1 << " " << mid << endl;
int ans;
cin >> ans;
if (mid - ans < k)
//mid为前面全1,ans为实际,差为0个数。
{
//第k个0还要在后面
l = mid;
} else {
//第k个0在前面找
r = mid;
}
}
cout << "! " << l + 1 << endl;
}