Halfway
题意是给定一个数,找出\([1, n]\)区间内和等于\((n - 1) * n / 4\)的数,因为区间内的数的和具有单调性,且数据范围只能用\(log(n)\)的算法来做,考虑二分查找
我写的二分本质上是向左找数,因为计算从1到n的和,再除以二,因为是向下取整,会有精度损失,正常二分找的数的和是要比理想中的和大,所以应该向左找
#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
ll a;
cin >> a;
ll sum = (a - 1) * a / 4;
ll l = 0, r = a;
while (l <= r) {
ll mid = l + (r - l) / 2;
if ((a - mid - 1) * (a - mid) / 2 == sum)
r = mid - 1;
else if ((a - mid - 1) * (a - mid) / 2 > sum)
l = mid + 1;
else
r = mid - 1;
}
cout << l << endl;
return 0;
}

浙公网安备 33010602011771号