[ CQOI 2014 ] 数三角形
\(\\\)
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 ] 数三角形相关推荐
- 一本通1655数三角形
1655:数三角形 时间限制: 1000 ms 内存限制: 524288 KB [题目描述] 给定一个 n×m 的网格,请计算三点都在格点上的三角形共有多少个.下图为 4×4 的网格上 ...
- 组合计数——车的放置(逆元)+数三角形+序列统计(lucas定理)
通用传送门:https://www.acwing.com/activity/content/16/ 思路:设C(a,b)为从a中取出b个的组合数,设A(a,b)从a中选出b个进行排列的排列数. 对于题 ...
- 组合数学——数三角形
数三角形 给定一个 n×m 的网格,请计算三点都在格点上的三角形共有多少个. 下图为 4×4 的网格上的一个三角形. 注意:三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数 m 和 ...
- 2023NHOI数三角形题解
第五题数三角形(e.cpp)[题目描述]已知一个包含n个非负整数的数组a,要从中选出三个数作为三角形的三条边的边长,有多少种不同的选法.注意:要组成三角形需要满足的条件是任意两边之和大于第三边.[输入 ...
- bzoj3505 / P3166 [CQOI2014]数三角形
P3166 [CQOI2014]数三角形 前置知识:某两个点$(x_{1},,y_{1}),(x_{2},y_{2})\quad (x_{1}<x_{2},y_{1}<y_{2})$所连成 ...
- P3166 [CQOI2014]数三角形(组合数学)
P3166 [CQOI2014]数三角形(组合数学) 整点三角形个数. 正难则反,求出总方案和共线三角形方案数即可. 总方案:C((n+1)(m+1),3)C((n+1)(m+1),3)C((n+1) ...
- 计蒜客NOIP模拟赛 数三角形
数三角形 题目描述 刚刚上高中的洁洁在学习组合数学的过程中遇到一道麻烦的题目,她希望你能帮助她解决.给定一张无向完全图 G,其中大部分边被染成蓝色,但也有一些边被染成红色或者绿色.现在,洁洁需要给这张 ...
- 数三角形 (组合数学+分类讨论)
数三角形 [Link](信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)) 题意 给定一个 n × m n\times m n×m的网格,请计算三点都在格点上的三角形共有多少个. 题解 ...
- BZOJ 3505 [Cqoi2014]数三角形(组合数学)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题目大意] 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注 ...
- spark的数三角形算法_数据算法 Hadoop Spark大数据处理技巧 PDF 下载
相关截图: 资料简介: 本书介绍了很多基本设计模式.优化技术和数据挖掘及机器学习解决方案,以解决生物信息学.基因组学.统计和社交网络分析等领域的很多问题.这本书还概要介绍了MapReduce.Hado ...
最新文章
- UA MATH523A 实分析1 集合论基础6 一些点集拓扑基本概念
- 千万商家的智能决策引擎AnalyticDB
- 上周面试回来后写的Java面试总结,想进BAT必看
- nat 网卡间数据包转发_nat端口转发示例
- python 隐藏命令行窗口_python如何只执行cmd中的动作,但消除或隐藏cmd窗口 - 小众知识...
- TransD:通过动态映射矩阵嵌入(知识图谱嵌入)ACL 2015
- 深度学习——在TensorFlow中查看和设定张量的形态
- Spark生态之Spark Streaming
- 楼市捞金术:我是怎么在9个月把房价炒高两三倍的
- matlab 行 读取文件 跳过_Matlab调试:跳过下一行而不执行
- 如何在计算机里打开ps,传授电脑psd文件用什么软件打开
- java开发正则表达式
- VMware ESXi 安装教程
- 百度在线语音合成API接口简单应用
- js完美转换阿拉伯数字为数字大写
- EXCEL中矩阵运算
- 治安防控平台搭建,为您打造平安社区
- Unity VR开发教程 OpenXR+XR Interaction Toolkit(七)射线抓取
- Linux下文件解压缩、软件安装
- 游戏必备组件_一款Beta版游戏周销量 30 万份,独立游戏究竟有多火?
热门文章
- Windows Phone 7 不温不火学习之《工程结构》
- Microsoft .NET Micro Framework Training conducted by Sean Liming (上海)
- 客户端无刷新调用服务器程序
- 桌面APP打包利器 —— Node-webkit
- PHPStorm更换主题,调整背景和字体颜色
- 全网首发:分析及解决com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required
- LINUX编译mate-desktop/pluma-1.24.0文本编辑器
- 手机应用只清理不够,还要卸载
- SVN替换图标后依然显示老图标的BUG
- 没有人会认真阅读协议,有恶意皆无效