思路:线性时间复杂度就可以解决,不用二分,我们枚举横坐标,然后看当前横坐标情况下多少个纵坐标满足条件。
代码:
void solve(){
int r;
cin >> r;
int y = r, ans = 0;
for(int x = 0;x <= r;x ++){ //枚举横坐标x,然后看多少给y满足条件
while(x * x + y * y >= (r + 1) * (r + 1)){
y --;
}
int top = y;
while(top > 0 && x * x + top * top >= r * r){
ans ++;
top --;
}
}
cout << ans * 4 << endl;
}