Description

给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个。

下图为4x4的网格上的一个三角形。

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

Input

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

Output

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

HINT

数据范围
$1\leqslant m,n \leqslant 1000$

  这道题一眼看去有一个非常显然的想法,那就是先用组合数算出任选三点出来的方案数,最后再减去三点共线的情况即可。那么关键就在于如何求三点共线的数目。

  首先,我们要用到一个公式:设两个整点分别为$(x_1,y_1)$,$(x_2,y_2)$,那么两点之间连线上的整点数目为$gcd(|x_2-x_1|,|y_2-y_1|)$。

  我觉得这个公式需要证明一下(其实很简单)。

  首先,这条直线可以平移一下,使得$x_1=y_1=0$。为了考虑方便,我们这里还设$x_2 \geqslant 0,y_2 \geqslant 0$

  设$\Delta x=x_2,\Delta y =y_2$(只是为了好看一点),连线上整点的坐标为$(x,y)$,那么显然有:$$\frac{x}{\Delta x}=\frac{y}{\Delta y}$$

  设$r=gcd(\Delta x,\Delta y)$,$\Delta x=ar$,$\Delta y=br$,那么有:$$xb=ya$$

  由于$a,b$互质,$x,y$为整数,于是我们就得到了$$x=ka,y=kb(k \in Z)$$;

  由于$0 \leqslant x \leqslant \Delta x,0\leqslant y \leqslant \Delta y$且$x,y$为整数

  所以$x,y$的取值共有$\Delta x / a=\Delta y/b=gcd(\Delta x,\Delta y)$种

  除去$x=\Delta x,y=\Delta y$这组解,这两点连线上共有$gcd(\Delta x,\Delta y)-1$个整点。

  接下来我们可以直接枚举线段,然后计算有线段上有多少个整点;然而这样复杂度是$O(n^2m^2)$的。

  然后,显然每一条线段经过平移,使它的左端点在矩形左下角或者左上角。由于向下和向上的线段对称,所以只需要计算一种即可。

  所以就固定一个端点为$(0,0)$,枚举另外一个端点在哪里,计算一下即可。

  下面贴代码(话说这么一道题我好像讲复杂了):

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)using namespace std;
typedef long long llg;int n,m;
llg ans,x;int gcd(int a,int b){if(!b) return a;int r=a%b;while(r) a=b,b=r,r=a%b;return b;
}int main(){File("a");scanf("%d %d",&n,&m);x=(n+1)*(m+1); ans=x*(x-1)*(x-2)/6;for(int i=0;i<=n;i++)for(int j=0;j<=m;j++)if(i|j){llg x=(llg)(n-i+1)*(llg)(m-j+1);ans-=x*(llg)(gcd(i,j)-1);if(i && j) ans-=x*(llg)(gcd(i,j)-1);}printf("%lld",ans);return 0;
}

转载于:https://www.cnblogs.com/lcf-2000/p/6218327.html

BZOJ 3505 【CQOI2014】 数三角形相关推荐

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

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

  2. bzoj 3505: [Cqoi2014]数三角形

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 970  Solved: 595 [Submit][Status][Discuss] Descript ...

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

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

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

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

  5. 【BZOJ 3505】 [Cqoi2014]数三角形 容斥原理+排列组合+GCD

    我们先把所有三角形用排列组合算出来,再把一行一列上的三点共线减去,然后我们只观察向右上的三点共线,向左上的乘二即可,我们发现我们如果枚举所有的两边点再乘中间点的个数(GCD),那么我们发现所有的两边点 ...

  6. [CQOI2014]数三角形 题解(找规律乱搞)

    题面 其实这道题不用组合数!不用容斥! 只需要一个gcd和无脑找规律(滑稽 乍一看题目,如果单纯求合法三角形的话情况太多太复杂,我们可以从局部入手,最终扩展到整体. 首先考虑这样的情况: 类似地,我们 ...

  7. 洛谷 P3166 [CQOI2014]数三角形(gcd+组合计数)

    题目描述 给定一个 N×MN\times MN×M 的网格,请计算三点都在格点上的三角形共有多少个.注意三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数 MMM 和 NNN . 输 ...

  8. P3166 [CQOI2014]数三角形

    文章目录 ResultResultResult HyperlinkHyperlinkHyperlink DescriptionDescriptionDescription SolutionSoluti ...

  9. P3166 [CQOI2014]数三角形(结论)

    https://www.luogu.com.cn/problem/P3166 思路: cf也有一道几乎一致的题,但是那题是2e3个点,可以n^2logn,先算出总数C(n,3),然后预处理经过某个点的 ...

  10. [CQOI2014]数三角形 组合数 + 容斥 + gcd

    推导过程 : 组合数+容斥原理+gcd 正确做法是暴力的一种优化,ans=所有情况 - 平行坐标轴的三点共线 - 斜线三点共线 如果快速求斜线三点共线: 首先要知道一个结论,对于点(a,b) (x,y ...

最新文章

  1. oracle proc 定义宿主,oracle proc 编程基础及最小化案例
  2. ## Hive分析疫情数据
  3. NTT 高级科学家:光子是深度学习的未来!
  4. C语言SQLite3基本操作Demo
  5. caffe-gpu ubuntu 安装_如何在Linux中安装vnStat和vnStati监视网络流量
  6. python【蓝桥杯vip练习题库】BASIC-28Huffuman树(贪心 Huffuman)
  7. python新旧特性过渡_网站改版时的一种新旧版过渡方案
  8. Beetlex官网迁移完成
  9. 如果你是一位资深的玩机人士,那么你不能错过它——uTools
  10. mysql 创建表字段长度范围_Mysql的建表规范与注意事项
  11. struts2中的method
  12. fedora 初始化系统_用Fedora数字化VHS
  13. 解决vmrc的连接已断开,正在尝试重新连接
  14. 查纸张开数软件怎么样
  15. 2019web前端开发视频教程资料(汇总整理)
  16. 如何通过stm32驱动电源检测芯片cs5463
  17. Matlab中_pkg.exe,pkg文件该如何打开?轻松打开pkg文件的方法
  18. 怎样用公网连接虚拟服务器,连接公网服务器设置方法
  19. 骁龙8gen2和骁龙8gen1plus区别
  20. 10100cpu支持Linux,i3-10100 cpu能装win7吗?i3-10100 装win7详细教程(完美支持)

热门文章

  1. 地震观测仪器的历史和发展趋势(三)
  2. python买卖股票_python买卖股票的最佳时机(基于贪心_蛮力算法)
  3. cuba_CUBA Platform 6.3的新增功能
  4. python怎么重新运行_如何用python重新运行程序
  5. springcloud搭建以及集成tx-lcn分布式事务解决框架
  6. 【题解】CF760B:Frodo and pillows
  7. 漏洞大爆光 QQ漏洞 飞秋漏洞 360浏览器劫持
  8. 实话实说!猿如意大测评!助力coding!
  9. JDBC 加载驱动报错解决办法
  10. 2020年《时间的朋友》跨年演讲金句集锦