求一个圆能包含多少个单位长的正六边形,从圆心开始枚举每一列有多少个六边形,从x=1,y=1,R,开始,中间的一列可以直接算出来,并算出最大y能取多少,数量就是y-2
然后向右枚举每一列的y最大为多少,枚举到以后可得右边此列和左边此列共有(2*(y))个,最后计算总和即可
#include<cstdio>
#include<iostream>
using namespace std;
long long n;
long long work()
{
long long ans=0;
long long x=1,y=1;
while(x*x+3*y*y<=4*n*n)
{
y+=2;
}
//cout<<"x="<<x<<" y="<<y<<" ans="<<ans<<endl;
ans+=y-2;
x+=3;y-=1;
//cout<<"x="<<x<<" y="<<y<<" ans="<<ans<<endl;
while(y>=0)
{
if((x*x+3*y*y>4*n*n)||((x+1)*(x+1)+3*(y-1)*(y-1)>4*n*n))
y-=2;
else
{ans+=(y*2);x+=3;y+=1;}
//cout<<"x="<<x<<" y="<<y<<" ans="<<ans<<endl;
}
return ans;
}
int main()
{
while(scanf("%I64d",&n)!=EOF)
printf("%I64d\n",work());
return 0;
}