CF603D Ruminations on Ruminants(计算几何/Simson theorem)

CF603D Ruminations on Ruminants

给定n条直线,两两不平行,且任意三条直线不经过同一个点,然后求解满足原点在外接圆上的由三条直线围成的三角形有多少个。

首先这道题只需要知道Simson theorem就可以做了。
定理内容是三角形外接圆上的点到三角形三边的射影共线。
逆定理是满足到三角形三边射影共线的点在三角形外接圆上。

那么我们只需要求解出原点到每条直线的垂足,然后枚举一个点,计算出这个点到后面所有点的斜率,然后相同斜率的就可以产生贡献,相当于统计平面内三点共线的对数,我们可以通过枚举+排序做到 O ( n 2 ) O(n^2) O(n2)

这里有个技巧,就是斜率不存在的点我们将它们的斜率设为INF。

另外还需要特判一下垂足重合的情况,只会出现在直线经过原点的情况,其他时候垂足一定直线就是一定的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值