阿里笔试2022.3.4第二题个人感觉最简洁的解法


背景浙农林(双非)2019级ACM集训队队长,ICPC金,2022.3.4笔试编程题满分,前面选择题应该错了几个。
看到网上有些同学分享解法,但是感觉不太简洁,这里分享下我的想法。

题目是这样的:
一个正m边形,他想知道多边形中等腰锐角三角形的数量。(三角形的顶点要在多边形的顶点上)
不同的三角形的定义:两个三角形,只要有一个点不在同一个位置上就算做不同的三角形。
数据范围3-10^7

来看下面这张图:


我们在多边形里选择三个点先构成等腰三角形,先不考虑锐角这个条件,比如说我们在上图这个正八边形里选择点1作为顶点,点6和点4作为底边的两个端点
我们现在要去判断角I(也就是角614)是否是锐角
而角α(角O41)=角β(角O14),且角α+角β=角γ(角5O4)=角I
而角γ+角II(角1O4)=180度
所以角I+角II=180度
那么我们的问题就变成了判断角II是否是钝角即可
而角II我们可以看成是角III(角1O2)+角IV(角2O3)+角V(角3O4)构成,并且很容易看出来角III=角IV=角V=360/8=45度

所以实际上我们的问题就被转化成了求满足90<(360/n)*k<180的整数k有多少个
化简一下就是满足n<4*k且2*k<n的整数k有多少个

最后容斥掉等边三角形的情况即可。

放一下代码:

#阿里笔试##笔经##阿里巴巴#
全部评论
请问前面选择题应该怎么准备呢?
1 回复 分享
发布于 2022-03-11 19:36
请问选择题可以和编程题来回切换吗?
点赞 回复 分享
发布于 2022-03-14 10:10
你这也太牛了吧
点赞 回复 分享
发布于 2022-03-11 01:25
扫码直接接收阿里内推,直通offer!!!
点赞 回复 分享
发布于 2022-03-08 18:53

相关推荐

03-12 12:33
嘉应学院 Python
堆肥大王:认可你的做法,但无产阶级的兄弟们也希望你能过的更好
点赞 评论 收藏
分享
评论
7
25
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务