【GDKOI2017】 两个胖子萌萌哒 小学奥数题
题目大意:给你一个n×m的网格,你要在这个网格上画三角形。
三角形的顶点只能在网格的整点上,且至少有一条边平行于x或y轴,且三角形面积为整数。问你能画多少个不同的三角形。
两个三角形被判定为不同,当且仅当两个三角形所包含的点集不相同。
多组询问,n,m≤109。
这题是裸的小学奥数题。。。。
我们先不管那个面积限制,先来看下有多少个三角形满足前两个条件。
我们令三角形的一边平行于x轴,我们考虑枚举底边,显然底边有m(m+1)(n+1)2种不同的取法(不同的位置,长度)
然后,我们枚举三角形的顶点,显然不能跟底边位于同一个x轴上,那么有n(m+1)种取法。
平行与y轴的情况同理。
但是这么算会将直角三角形的数量算重,我们考虑减去这些三角形
我们考虑枚举三角形的直角顶点位置以及两边边长,这个相当于是在两条长度分别为n和m的线段上截取两段出来,方案数显然为m(m+1)n(n+1)4种。
然后,考虑到枚举出的一组线段,共有4种构造的方法,故方案数要×4。
我们成功求出了三角形的数量。
考虑这些三角形中不合法的数量,不合法的三角形,显然底边和高的长度均为奇数。
我们考虑将网格格点进行黑白染色,记 n1=⌈n2⌉,n2=⌊n2⌋。m1,m2同理。
那么显然,一个不合法的,且底边与x轴平行的三角形,底边两点的横坐标必然一个为奇,一个为偶数的,方案数为n1×n2。
下面考虑枚举底边和顶点的纵坐标,显然底边和顶点所在的纵坐标必须一个为奇,一个为偶,方案数为2m1×m2,顶点横坐标显然有n中选法。
故与x轴平行的不合法三角形总共有2n1×n2×m1×m2×n个。
底边与y轴平行的三角形同理。
考虑不合法的直角三角形,数量为4n1×n2×m1×m2。(枚举两条边边长,直角朝向)。
然后就没有了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2017-10-27 【poj1850】 Code 数位dp+记忆化搜索
2017-10-27 【poj3252】 Round Numbers (数位DP+记忆化DFS)
2017-10-27 【洛谷十月月测】 P3927 SAC E#1 - 一道中档题 Factorial