题目描述

给定一个 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. 在linux内核中获得比jiffies精度更高的时间值【转】
  2. 不用一行代码,用 API 操作数据库,你信吗
  3. “低代码”开发管理应用,这家大型连锁企业也说好
  4. promtail 配置详解_基于loki+promtail+grafana技术的日志集合
  5. Madagascar中的宏定义--圆周率PI
  6. Windows Server 2008 将与 Visual Studio 2008 和 SQL Server 2008 于2008年2月27 日在洛杉矶共同发布...
  7. C#网站发布在IIS10上,Access数据库读取为空白的解决方案
  8. 【CNN】多角度理解CNN
  9. 计算机高程知识点,数字测图原理与方法知识点
  10. d-s证据理论 matlab 完整代码
  11. (生物信息学)R语言与统计学入门(十)—— 多因素Cox回归分析
  12. 用JavaScript实现用户登录验证、注册信息格式检验(附代码)
  13. 【软件安装】win10下Lighttools8.4.0(64)光学系统建模软件的安装教程
  14. 说说的那道求面积的小学六年级几何题
  15. 浅谈电弧光保护在10kV变电站高压室的应用方案
  16. 180721 逆向-极客巅峰(Re)
  17. 如何在Windows 7和Vista之间共享文件和打印机
  18. 瑞数FSSBBIl1UgzbN7N443T分析
  19. 麦克斯韦方程组,史上最牛逼公式之一
  20. JEDEC79-4翻译告一段落

热门文章

  1. 回收站的文件数据误清空了怎么恢复
  2. Cinema 4D 2023版本推出!Maxon One秋季新体验!
  3. 加权合并规则与路径压缩
  4. xgboost 怎么读_当初零基础入学的小学生,现在怎么样了?妈妈:每天辅导到十点...
  5. html期末作业代码网页设计——云南民族文化(8页) HTML+CSS+JavaScript html网页制作期末大作业成品_网页设计期末作业
  6. GoF的23种设计模式的分类和功能
  7. 详细了解一下铝型材挤压原理
  8. ac3168无线网卡驱动下载_星际蜗牛C款i211网卡服务器装Windows sevse2012R2服务器装机篇下...
  9. Android逆向之旅---动态方式破解apk前奏篇(Eclipse动态调试smail源码)
  10. 毕业旅行~丽江、玉龙雪山、泸沽湖、丽江古城(2019)