题意让我们找满足条件的大于等于1e5的最小数,可以用二分的第一个板子做:
这里二分答案二分的就是一个k值,我们需要判断这个k值是否满足条件即可。
#include<bits/stdc++.h>
using namespace std;
bool check(int k)
{
int sum=0;
for(int i=1;i<=k;i++)
{
sum+=pow(ceil(sqrt(i)),2)-pow(floor(sqrt(i)),2);
if(sum>=1e5)return true;
}
return false;
}
int main()
{
int l=1,r=1e9;
while(l<r)
{
int mid=l+r>>1;
if(check(mid))r=mid;
else l=mid+1;
}
cout<<l<<endl;
return 0;
}