将题目中的二分写法做一个小小的改变即可,注意:一定要将左边移动,不然会损失一些次数。
#include <bits/stdc++.h>
using namespace std;
int f(int l, int r, int cnt) {
int n = 0, mid;
while (l<=r) {
n++;
mid = ((long long)l+r)/2;
if (n==cnt) break;
else l = mid+1;
}
if (cnt>n) {
return -1;
}
return mid;
}
int main() {
int T;
cin>>T;
while (T--) {
int l, r, cnt;
cin>>l>>r>>cnt;
cout<<f(l, r, cnt)<<endl;
}
return 0;
}

京公网安备 11010502036488号