思路:线性时间复杂度就可以解决,不用二分,我们枚举横坐标,然后看当前横坐标情况下多少个纵坐标满足条件。
代码:
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;
}