题目描述

给定一个 n×m 的网格,请计算三点都在格点上的三角形共有多少个。
下图为 4×4 的网格上的一个三角形。

注意:三角形的三点不能共线。

输入格式

输入一行,包含两个空格分隔的正整数 m 和 n。

输出格式

输出一个正整数,为所求三角形数量。

数据范围

1≤m,n≤1000

输入样例
2 2
输出样例
76

题目分析

我 们 直 接 算 组 成 三 角 形 的 数 量 并 不 好 算 , 因 此 我 们 可 以 反 过 来 , 先 算 出 所 有 的 选 择 , 再 减 去 其 中 不 合 法 的 方 案 我们直接算组成三角形的数量并不好算,因此我们可以反过来,先算出所有的选择,再减去其中不合法的方案 我们直接算组成三角形的数量并不好算,因此我们可以反过来,先算出所有的选择,再减去其中不合法的方案 即 可 。 即可。 即可。

首 先 , 在 网 格 的 所 有 点 中 任 取 三 个 点 的 方 案 数 为 : C n ∗ m 3 首先,在网格的所有点中任取三个点的方案数为:C_{n*m}^3 首先,在网格的所有点中任取三个点的方案数为:Cn∗m3​

然 后 , 再 减 去 所 有 不 合 法 ( 三 点 组 成 一 条 直 线 ) 的 情 况 : 然后,再减去所有不合法(三点组成一条直线)的情况: 然后,再减去所有不合法(三点组成一条直线)的情况:
1 、 三 点 组 成 的 直 线 斜 率 为 0 ( 三 个 点 在 一 行 上 ) 的 情 况 : n ∗ C m 3 ( 一 共 有 n 行 , 每 行 上 有 m 个 点 ) 1、三点组成的直线斜率为0(三个点在一行上)的情况:n*C_m^3(一共有n行,每行上有m个点) 1、三点组成的直线斜率为0(三个点在一行上)的情况:n∗Cm3​(一共有n行,每行上有m个点)
2 、 三 点 组 成 的 直 线 斜 率 为 ∞ ( 三 个 点 在 一 列 上 ) 的 情 况 : m ∗ C n 3 ( 一 共 有 m 列 , 每 列 上 有 n 个 点 ) 2、三点组成的直线斜率为∞(三个点在一列上)的情况:m*C_n^3(一共有m列,每列上有n个点) 2、三点组成的直线斜率为∞(三个点在一列上)的情况:m∗Cn3​(一共有m列,每列上有n个点)

3 、 三 点 组 成 的 直 线 斜 率 不 为 0 和 ∞ 的 情 况 , 这 时 的 斜 率 分 为 大 于 0 和 小 于 0 , 因 为 这 两 种 情 况 是 对 称 的 , 因 此 我 们 3、三点组成的直线斜率不为0和∞的情况,这时的斜率分为大于0和小于0,因为这两种情况是对称的,因此我们 3、三点组成的直线斜率不为0和∞的情况,这时的斜率分为大于0和小于0,因为这两种情况是对称的,因此我们 只 需 要 求 出 大 于 0 的 情 况 即 可 ( 小 于 0 的 方 案 数 与 大 于 0 的 方 案 数 相 等 ) 。 只需要求出大于0的情况即可(小于0的方案数与大于0的方案数相等)。 只需要求出大于0的情况即可(小于0的方案数与大于0的方案数相等)。
我 们 可 以 枚 举 网 格 中 所 有 低 为 i , 高 位 j 的 斜 边 , 该 边 的 两 个 端 点 为 三 角 形 的 两 个 点 , 第 三 个 点 在 直 线 的 内 部 。 我们可以枚举网格中所有低为i,高位j的斜边,该边的两个端点为三角形的两个点,第三个点在直线的内部。 我们可以枚举网格中所有低为i,高位j的斜边,该边的两个端点为三角形的两个点,第三个点在直线的内部。
首 先 , 这 样 的 直 线 有 ( n − i ) ∗ ( m − j ) 个 , 每 条 直 线 内 部 第 三 个 点 的 选 择 方 案 数 为 g c d ( i , j ) − 1 。 首先,这样的直线有(n-i)*(m-j)个,每条直线内部第三个点的选择方案数为gcd(i,j)-1。 首先,这样的直线有(n−i)∗(m−j)个,每条直线内部第三个点的选择方案数为gcd(i,j)−1。

因 此 , 对 于 每 一 个 ( i , j ) , 其 方 案 数 有 : ( n − i ) ∗ ( m − j ) ∗ ( g c d ( i , j ) − 1 ) 因此,对于每一个(i,j),其方案数有:(n-i)*(m-j)*(gcd(i,j)-1) 因此,对于每一个(i,j),其方案数有:(n−i)∗(m−j)∗(gcd(i,j)−1)

代码如下
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <map>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <algorithm>
#define LL long long
#define ULL unsigned long long
#define PII pair<int,int>
#define x first
#define y second
using namespace std;
const int N=1e6+5,INF=0x3f3f3f3f;
LL C(int n)                     //求C(n,3)的函数,因为本题中只会用到求C(x,3)的方法
{return (LL)n*(n-1)*(n-2)/6;
}
int main()
{int n,m;cin>>n>>m;n++,m++;                     //行列的点数为网格数+1LL ans=C(n*m)-m*C(n)-n*C(m); //先算出所有选择减去前两种情况for(int i=1;i<=n;i++)            //减去第三种情况for(int j=1;j<=m;j++)ans-=2ll*(__gcd(i,j)-1)*(n-i)*(m-j);  //因为有斜率为正和负两种情况,因此还要乘2cout<<ans<<endl;return 0;
}

1310. 数三角形(组合数学)相关推荐

  1. P3166 [CQOI2014]数三角形(组合数学)

    P3166 [CQOI2014]数三角形(组合数学) 整点三角形个数. 正难则反,求出总方案和共线三角形方案数即可. 总方案:C((n+1)(m+1),3)C((n+1)(m+1),3)C((n+1) ...

  2. 数三角形 (组合数学+分类讨论)

    数三角形 [Link](信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)) 题意 给定一个 n × m n\times m n×m的网格,请计算三点都在格点上的三角形共有多少个. 题解 ...

  3. 组合数学——数三角形

    数三角形 给定一个 n×m 的网格,请计算三点都在格点上的三角形共有多少个. 下图为 4×4 的网格上的一个三角形. 注意:三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数 m 和 ...

  4. 计蒜客NOIP模拟赛 数三角形

    数三角形 题目描述 刚刚上高中的洁洁在学习组合数学的过程中遇到一道麻烦的题目,她希望你能帮助她解决.给定一张无向完全图 G,其中大部分边被染成蓝色,但也有一些边被染成红色或者绿色.现在,洁洁需要给这张 ...

  5. 一本通1655数三角形

    1655:数三角形 时间限制: 1000 ms         内存限制: 524288 KB [题目描述] 给定一个 n×m 的网格,请计算三点都在格点上的三角形共有多少个.下图为 4×4 的网格上 ...

  6. 组合计数——车的放置(逆元)+数三角形+序列统计(lucas定理)

    通用传送门:https://www.acwing.com/activity/content/16/ 思路:设C(a,b)为从a中取出b个的组合数,设A(a,b)从a中选出b个进行排列的排列数. 对于题 ...

  7. 2023NHOI数三角形题解

    第五题数三角形(e.cpp)[题目描述]已知一个包含n个非负整数的数组a,要从中选出三个数作为三角形的三条边的边长,有多少种不同的选法.注意:要组成三角形需要满足的条件是任意两边之和大于第三边.[输入 ...

  8. bzoj3505 / P3166 [CQOI2014]数三角形

    P3166 [CQOI2014]数三角形 前置知识:某两个点$(x_{1},,y_{1}),(x_{2},y_{2})\quad (x_{1}<x_{2},y_{1}<y_{2})$所连成 ...

  9. Nowcoder 5477E. 弦(卡特兰数、组合数学)

    题目描述: 给定一个圆,圆上有2N个互不重叠的点.每次操作随机选择两个先前未选择过的点连一条弦,共连成N条弦,求所有弦不交的概率. 输入描述: 一行,只有一个整数N(1≤N≤10^7). 输出描述: ...

最新文章

  1. CMakeFile命令之file
  2. AHOI2009 中国象棋
  3. 用javascript实现以下功能!_模电小实验:用三极管实现触摸开关功能
  4. Java Spring singleton bean的创建源代码
  5. 微服务设计原则和解决方案
  6. thinkphp 模板页面出现空白
  7. 老男孩教育学员参观机房实践活动
  8. 利用U盘安装windows 7
  9. 落户北京经开区 小米汽车首车预计2024年下线并量产 网友:开始存钱!
  10. java 令牌解析_Java JWT的令牌机制
  11. 【专题报道】Google I/O开发者大会
  12. 程序打成jar包路径不对、找不到配置文件的解决
  13. 2018中国云原生用户大会:网易云深度解析微服务框架
  14. 动态生成的chosen实现模糊查询
  15. 3月16日—3月20日四年级课程表
  16. 善于做“加减法”的百分点科技 成就数据智能的先行者
  17. 雷军—我十年的程序员生涯
  18. 写论文需要哪些软件?用迅读PDF大师,PDF转换编辑压缩
  19. 键盘连接在计算机的,技巧:如何在计算机键盘上输入连字符和破折号?
  20. 从炒房现象反思当前中国投资环境

热门文章

  1. Nature Methods期刊的latex模板去哪里找?
  2. 小学学校计算机房使用制度,实验室管理制度、计算机房管理制度
  3. opengl 贴图教程_如何使用叶贴图可视化空气污染-深入教程
  4. 股票L1和L2都代表是什么意思?
  5. linux打开笔记本摄像头驱动程序,[已解决]如何给笔记本摄像头装驱动?
  6. 联想电脑清灰后触摸板失效
  7. RMVB遭遇“无法渲染此文件”解决方案
  8. 如何把xml格式数据转成json格式?
  9. Shopfa:有哪些果蔬生鲜电商平台?
  10. 2021 CCF CSP-J2