圆圈 题解

28 篇文章 0 订阅
26 篇文章 0 订阅

圆圈 题解

题目

这里

解题方法

首先这道题目要求有多少个点在半径为 r r r的圆里面。
将其转述为,判断一个点 ( x , y ) (x,y) (x,y)是否在半径为 r r r的圆里面。
怎么判断呢?
如下图
在这里插入图片描述
我们知道点 ( x , y ) (x,y) (x,y)处于绿色线和红色线交错的位置。
则红色线的长度是 x 2 + y 2 \sqrt{x^2+y^2} x2+y2
因为红色线的长度等于黑色线的长度,所以我们只需要判断黑色线的长度是否小于等于圆的半径即可,如果满足,就代表此点在圆中。
也就是判断 x 2 + y 2 ≤ r 2 x^2+y^2\leq{r^2} x2+y2r2
我们只需要从 − r -r r r r r用两层循环包暴力断就行了
这样的时间复杂度是 O ( 4 r 2 ) O(4r^2) O(4r2),不能拿满分。
我们改进算法,假设说我们知道 x x x,那么是否可以求出 y y y的范围区间 [ l , r ] [l,r] [l,r]呢?是可以的。
因为 x 2 + y 2 ≤ r 2 x^2+y^2\leq{r^2} x2+y2r2,所以 y 2 ≤ r 2 − x 2 y^2\leq{r^2-x^2} y2r2x2,则 y y y的最大值为 ⌊ r 2 − x 2 ⌋ \lfloor{\sqrt{r^2-x^2}}\rfloor r2x2
同理,可以发现最小值就是最大值的相反数,即 y m a x = ⌊ r 2 − x 2 ⌋ y_{max}=\lfloor{\sqrt{r^2-x^2}}\rfloor ymax=r2x2 y m i n = − ⌊ r 2 − x 2 ⌋ y_{min}=-\lfloor{\sqrt{r^2-x^2}}\rfloor ymin=r2x2
假设 y = ⌊ r 2 − x 2 ⌋ y=\lfloor{\sqrt{r^2-x^2}}\rfloor y=r2x2
那么可以取 y + y + 1 y+y+1 y+y+1也就是 2 y + 1 2y+1 2y+1个数。
我们用一次循环枚举 x x x并每次求出 y y y,然后直接用答案加上 2 y + 1 2y+1 2y+1就行了。
时间复杂度为 O ( 2 r ) O(2r) O(2r)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值