\(\\\)

Description


求 \(N\times M\) 的网格图上有多少个格点构成的三角形。

当三点共线的时候我们不认为这是一个三角形。

  • \(n,m\le 10^4\)

\(\\\)

Solution


正难则反。容斥出答案。

总的选择三个点的方案数为 \(C_{n\times m}^3\) 。

需要去掉:

  • 同一行的三个点 \(n\times C_m^3\)

  • 同一列的三个点 \(m\times C_n^3\)

  • 共斜线上的三个点。

但是注意!斜线的斜率可能不为 \(1\) 或 \(-1\) 。

因为有这样的东西存在:

考虑怎么去掉每一条斜线上选三个整点的方案数。

这个思路就很厉害了。

考虑枚举一个向量。

对于枚举的一个向量 \((i,j)\ |\ i\le n,j\le m\) ,在整个网格图中有\((n-i)\times(m-j)\times 2\) 个线段与之对应。

解释一下 \(\times 2\) 的含义是,对斜率取相反数得到的所有线段,显然个数与原来相同。

然后为了不重复,我们强制选择线段的两个端点,然后选择一个线段上的整点。

线段上不算端点的整点个数是 \((i,j)-1\) ,因为这一线段上整点坐标只能表示为 \((\frac i{(i,j)}\times k,\frac j{(i,j)}\times k)\)

然后在总方案里去掉 \(C_{(i,j)-1}^1\times (n-i)\times (m-j)\times 2\) 就可以了。

关于正确性多说一句:

考虑两个重合的向量,大的向量计数里一定不会包含小的计数,因为小的计数的每一个情况,都有两个点在大的线段上,不符合大的计数要求。

如图,蓝线上一个合法的组合用三个箭头表示,其中必然存在形如绿色的两个箭头的选择,而他们都在黑色线段上,不符合黑色计数要求。

\(\\\)

Code


#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define R register
using namespace std;
typedef long long ll;ll n,m,ans;ll C(ll x){return (x*(x-1)/2)*(x-2)/3;}ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}int main(){scanf("%lld%lld",&n,&m);++n; ++m;ans=C(n*m)-n*C(m)-m*C(n);for(R ll i=1;i<=n;++i)for(R ll j=1,res;j<=m;++j){res=1+gcd(i,j);if(res>=3) ans-=(res-2)*(n-i)*(m-j)*2;}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/SGCollin/p/9907331.html

[ CQOI 2014 ] 数三角形相关推荐

  1. 一本通1655数三角形

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

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

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

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

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

  4. 2023NHOI数三角形题解

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

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

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

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

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

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

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

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

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

  9. BZOJ 3505 [Cqoi2014]数三角形(组合数学)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题目大意] 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注 ...

  10. spark的数三角形算法_数据算法 Hadoop Spark大数据处理技巧 PDF 下载

    相关截图: 资料简介: 本书介绍了很多基本设计模式.优化技术和数据挖掘及机器学习解决方案,以解决生物信息学.基因组学.统计和社交网络分析等领域的很多问题.这本书还概要介绍了MapReduce.Hado ...

最新文章

  1. UA MATH523A 实分析1 集合论基础6 一些点集拓扑基本概念
  2. 千万商家的智能决策引擎AnalyticDB
  3. 上周面试回来后写的Java面试总结,想进BAT必看
  4. nat 网卡间数据包转发_nat端口转发示例
  5. python 隐藏命令行窗口_python如何只执行cmd中的动作,但消除或隐藏cmd窗口 - 小众知识...
  6. TransD:通过动态映射矩阵嵌入(知识图谱嵌入)ACL 2015
  7. 深度学习——在TensorFlow中查看和设定张量的形态
  8. Spark生态之Spark Streaming
  9. 楼市捞金术:我是怎么在9个月把房价炒高两三倍的
  10. matlab 行 读取文件 跳过_Matlab调试:跳过下一行而不执行
  11. 如何在计算机里打开ps,传授电脑psd文件用什么软件打开
  12. java开发正则表达式
  13. VMware ESXi 安装教程
  14. 百度在线语音合成API接口简单应用
  15. js完美转换阿拉伯数字为数字大写
  16. EXCEL中矩阵运算
  17. 治安防控平台搭建,为您打造平安社区
  18. Unity VR开发教程 OpenXR+XR Interaction Toolkit(七)射线抓取
  19. Linux下文件解压缩、软件安装
  20. 游戏必备组件_一款Beta版游戏周销量 30 万份,独立游戏究竟有多火?

热门文章

  1. Windows Phone 7 不温不火学习之《工程结构》
  2. Microsoft .NET Micro Framework Training conducted by Sean Liming (上海)
  3. 客户端无刷新调用服务器程序
  4. 桌面APP打包利器 —— Node-webkit
  5. PHPStorm更换主题,调整背景和字体颜色
  6. 全网首发:分析及解决com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required
  7. LINUX编译mate-desktop/pluma-1.24.0文本编辑器
  8. 手机应用只清理不够,还要卸载
  9. SVN替换图标后依然显示老图标的BUG
  10. 没有人会认真阅读协议,有恶意皆无效