AcWing 1310. 数三角形

题目传送门

引理一

引理二

gcd(i,j)1的证明

对于斜边上的任何一点 (x,y), 其满足:

ybxa=dbca

注意:axc,byd

可知:$$\large \displaystyle y=\frac{d-b}{c-a}(x-a)+b=\frac{\frac{d-b}{gcd(d-b,c-a)}}{\frac{c-a}{gcd(d-b,c-a)}}(x-a)+b
\
\Rightarrow
\
y=\frac{d-b}{gcd(d-b,c-a)}*\frac{x-a}{\frac{c-a}{gcd(d-b,c-a)}}+b \ \ \ x \in Z^+

使$yZ+$,使$cagcd(db,ca)|(xa)$$$x=cagcd(db,ca)q+a

对于条件 byd 上述式子是由直线方程推出的,因此其在方程中等价于 axc, 因此我们只需要考虑 x 的范围限制即可:

ax=cngcd(db,ca)q+ac0qgcd(db,ca)

q 可以取这个区间中的所有整数,因此数量为 gcd(db,ca)+1

然后我们分析对于区间中的任意一个点 (x,y), 由于上面 q 的范围可知 axc, 因此均在斜边上不加上两个端点的话,就是 gcd(db,ca)1

算法分析

本题使用 容斥原理 的思想

题目给定长是n,宽是m的矩形,因此总端点数有(n+1)(m+1)个,从总端点数选3个点的情况有
C(n+1)(m+1)3种,再将不符合三角形规则的情况减去即可,即 三角形的数目 = C(n+1)(m+1)3- 不满足要求的情况(三点共线)

不满足的情况

  • 1、 斜率不存在:(m+1)Cn+13
  • 2、 斜率为0(n+1)Cm+13
  • 3、斜率存在且不为 0:由两个端点 AB 组成的横坐标之差是 i ,纵坐标之差是 j 的线段共有 2(nj+1)(mi+1) 条,对于每一条线段斜率上共有 gcd(i,j)+1 个端点,减去 AB 两个端点,即第三个点有 gcd(i,j)1 种满足情况,因此总方案数是 2(gcd(i,j)1)(nj+1)(mi+1)
posted @   糖豆爸爸  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2018-06-08 东师理想云平台异步任务处理系统V2.0重构思路
2018-06-08 Mysql查询出所有列名
2018-06-08 IntelliJ IDEA添加jar包
2017-06-08 Mysql中使用存储过程返回查询多个表的数据信息
Live2D
点击右上角即可分享
微信分享提示