基础算法题—— honoka和格点三角形

基础算法题—— honoka和格点三角形

前言

本人为一名普通二本学校自动化专业的大二学生,对编程有着少许兴趣。
第一次写博客,希望能与老铁们交流自己不成熟的见解。

做题心得

这道算法题并没有运用到多么高深的算法,仅考查了对计数算法的掌握。
很可惜的是,尽管在做题时我将所有情况都考虑到了,但是却因为不会将计算步骤分步求余而错失了AC的机会。好了,废话不多说了,让我们进入正题。

honoka和格点三角形题目

honoka最近在研究三角形计数问题。
她认为,满足以下三个条件的三角形是“好三角形”。
1.三角形的三个顶点均为格点,即横坐标和纵坐标均为整数。
2.三角形的面积为1。
3.三角形至少有一条边和x轴或y轴平行。
honoka想知道,在平面中选取一个大小为n*m的矩形格点阵,可以找到多少个不同的“好三角形”?由于答案可能过大,请对1000000007取模。
输入描述:
两个正整数n和m( 2 ≤n,m≤10^9)
输出描述:
面积为1的格点三角形的数量,对 10^9+7取模的结果。
#示例1
输入:
2 3
输出:
6
说明:
格点如下:
| * | * | * |
| * | * | * |
不妨设左下角坐标为(1,1),右上角坐标为到(3,2)。
那么三点坐标可选:
(1,1)(1,2)(3,1)
(1,1)(1,2)(3,2)
(1,1)(2,2)(3,1)
(1,1)(3,1)(3,2)
(1,2)(2,1)(3,2)
(1,2)(3,1)(3,2)
所以共有6个。

#示例2
输入:
100 100
输出:
7683984
牛客网题目链接

题目分析

通过对该题中对三角形三条件的分析,以及三角形的面积公式:S=(L*H)/2。我们可以了解到要满足“好三角形”,要符合L=2,H=1或者L=1,H=2。(在这里的L,我们可以理解为始终平行于x轴或y轴,防止底和高混淆)另外只有当n>=3和m>=2或者n>=2和m>=3成立时才可能出现“好三角形”。例如在n=2,m=2下,没有“好三角形”。

第一种情况——①n为底,非直角三角形而且L=2、②m为底,L=1

我们可以将第一种情况中的“好三角形”再细分为:非直角三角形而且L=2的“好三角形”、L=1的“好三角形”。
为了使公式更容易理解,我将会把公式的来源采用分骤的方式,逐步讲解。(以n=4, m=3为例)

①n为底,非直角三角形而且L=2
DYS=((n-2) * (m-1) * (n-2)) * 2

步骤1:(n-2)乘以(m-1)为选择L=2、而且平行与Y轴的情况:
(没有将(3.1)~(3.4&#

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值