我的方式是用暴力的方法找到每一行每一列的边界点;
但是有大神直接用一个公式解决了:floor(n*sqrt(2))*4;
想了很久还是不理解,求各路大神指点!
#include<iostream> #include<cmath> #include<cstring> using namespace std; int main() { long long n; cin>>n; if(n==0){cout<<1;return 0;} long long pre=0,cur; long long ans=0; for(long long i=0;i<=n;i++) { cur=(long long)(sqrt(1.0*(n*n-i*i))); ans++; if(pre-cur>1) ans+=pre-cur-1; pre=cur; } ans--; cout<<ans*4; }