“蔚来杯“2022牛客暑期多校训练营5-F-A Stack of CDs

本文详细介绍了如何通过数学方法解决牛客网'蔚来杯'2022暑期多校训练营中关于圆盘轮廓周长的问题,涉及圆心角计算、圆盘覆盖分析和算法实现,适合对ACM竞赛感兴趣的学生和开发者阅读。

"蔚来杯"2022牛客暑期多校训练营5-F-A Stack of CDs

题目大意

链接:https://ac.nowcoder.com/acm/contest/33190/F
来源:牛客网
nnn个圆盘,它们堆在一个二维平面上,彼此之间可能会覆盖对方,求从上往下看能看到的圆盘轮廓周长。
输入的顺序代表了圆盘从下到上的顺序。

解析

这道题可以说就是一道数学题,做法很多,我的思路如下:

  • 对于一个圆盘aia_iai,只需要看编号大于iii的圆盘有没有将其覆盖。
  • 以水平向右为始边,逆时针方向为正方向,角度均用弧度制。
  • 将圆盘aia_iai被覆盖的弧对应的圆心角的左右边界记录下来,并且在最后把有交集的区间合并。
  • 答案即为所有圆盘的周长减去每个圆盘被覆盖的弧长。

唯一的难点在于求被覆盖圆弧对应的圆心角。对于圆aaa和圆bbb(bbbaaa上方),我们要考虑他们的四种关系(两圆圆心相距ddd,即∣AB∣=d|AB| = dAB=d)。

  1. 相交:
    请添加图片描述

    如图所示,可用余弦定理求出cos⁡θ=(ra2+d2−rb2)/(2×d×ra)\cos \theta = (r_a^2 + d^2 - r_b^2)/(2\times d\times r_a)cosθ=(ra2+d2rb2)/(2×d×ra),从而求出

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值