codeforces 392A Blocked Points 枚举

    题意很繁琐..转化过来基本就是在平面上给一个半径为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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值