题意很繁琐..转化过来基本就是在平面上给一个半径为n的圆,求圆内有多少个点和圆外至少一个点的欧几里得距离恰好为1。想一下会发现四个象限其实是对称的,求一个象限的解*4就行,对一个象限内的点,发现一个象限内也可以分成两半,所以就是枚举出来1/8个圆的点就可以了...以第一象限为例的话,枚举的结束条件就是x>y。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
ll n,ans,m;
ll ss(ll x,ll y)
{
return x*x+y*y;
}
int main()
{
cin>>n;
if (n==0) cout<<1<<endl;
else if (n==1) cout<<4<<endl;
else
{
ll x=0,y=n;
for (x=0; x<n,x<=y; x++)
{
while (ss(x,y)>n*n) y--;
if (x>y) break;
if (x!=y) ans+=2;
else ans++;
}
ans-=2;
ans=ans*4+4;
cout<<ans<<endl;
}
return 0;
}