【GDKOI2017】 两个胖子萌萌哒 小学奥数题

题目大意:给你一个n×m的网格,你要在这个网格上画三角形。

三角形的顶点只能在网格的整点上,且至少有一条边平行于xy轴,且三角形面积为整数。问你能画多少个不同的三角形。

两个三角形被判定为不同,当且仅当两个三角形所包含的点集不相同。

多组询问,n,m109

 

这题是裸的小学奥数题。。。。

我们先不管那个面积限制,先来看下有多少个三角形满足前两个条件。

我们令三角形的一边平行于x轴,我们考虑枚举底边,显然底边有m(m+1)(n+1)2种不同的取法(不同的位置,长度)

然后,我们枚举三角形的顶点,显然不能跟底边位于同一个x轴上,那么有n(m+1)种取法。

平行与y轴的情况同理。

但是这么算会将直角三角形的数量算重,我们考虑减去这些三角形

我们考虑枚举三角形的直角顶点位置以及两边边长,这个相当于是在两条长度分别为nm的线段上截取两段出来,方案数显然为m(m+1)n(n+1)4种。

然后,考虑到枚举出的一组线段,共有4种构造的方法,故方案数要×4

我们成功求出了三角形的数量。

 

考虑这些三角形中不合法的数量,不合法的三角形,显然底边和高的长度均为奇数。

我们考虑将网格格点进行黑白染色,记 n1=n2n2=n2m1,m2同理。

那么显然,一个不合法的,且底边与x轴平行的三角形,底边两点的横坐标必然一个为奇,一个为偶数的,方案数为n1×n2

下面考虑枚举底边和顶点的纵坐标,显然底边和顶点所在的纵坐标必须一个为奇,一个为偶,方案数为2m1×m2,顶点横坐标显然有n中选法。

故与x轴平行的不合法三角形总共有2n1×n2×m1×m2×n个。

底边与y轴平行的三角形同理。

 

考虑不合法的直角三角形,数量为4n1×n2×m1×m2。(枚举两条边边长,直角朝向)。

然后就没有了 

 

posted @   AlphaInf  阅读(271)  评论(0编辑  收藏  举报
编辑推荐:
· 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
点击右上角即可分享
微信分享提示