BZOJ 3505 【Cqoi2014】 数三角形
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;
}
BZOJ 3505 【Cqoi2014】 数三角形的更多相关文章
- BZOJ 3505: [Cqoi2014]数三角形 数学
3505: [Cqoi2014]数三角形 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- Bzoj 3505: [Cqoi2014]数三角形 数论
3505: [Cqoi2014]数三角形 Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits Description
- bzoj 3505: [Cqoi2014]数三角形 组合数学
3505: [Cqoi2014]数三角形 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 478 Solved: 293[Submit][Status ...
- BZOJ 3505: [Cqoi2014]数三角形( 组合数 )
先n++, m++ 显然答案就是C(3, n*m) - m*C(3, n) - n*C(3, m) - cnt. 表示在全部点中选出3个的方案减去不合法的, 同一行/列的不合法方案很好求, 对角线的不 ...
- BZOJ 3505: [Cqoi2014]数三角形 [组合计数]
3505: [Cqoi2014]数三角形 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注意三角形的三点不能共线. 1<=m,n<=1000 $n++ m++$ $ans ...
- BZOJ 3505 [Cqoi2014]数三角形
3505: [Cqoi2014]数三角形 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形.注意三角形的三点不能共线. Input ...
- bzoj 3505 [Cqoi2014]数三角形(组合计数)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题意] 在n个格子中任选3点构成三角形的方案数. [思路] 任选3点-3点共线 ...
- BZOJ 3505 [Cqoi2014]数三角形(组合数学)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题目大意] 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注 ...
- bzoj 3505 [Cqoi2014]数三角形——排列组合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3505 好题!一定要经常回顾! 那个 一条斜线上的点的个数是其两端点横坐标之差和纵坐标之差的g ...
- bzoj 3505 [Cqoi2014]数三角形 组合
ans=所有的三点排列-共行的-共列的-斜着一条线的 斜着的枚举每个点和原点的gcd,反过来也可以,还能左右,上下挪 #include<cstdio> #include<cstrin ...
随机推荐
- java必备基础知识点
Java基础 1. 简述Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机.冰箱等 2. 简单写出 ...
- WebApi系列~FromUri参数自动解析成实体的要求
回到目录 关于webapi我之前写了一些文章,大家可以根据目录去浏览,今天要说的是个怪问题,也是被我忽略的一个问题,当你的Url参数需要被Api自动解析成实体的属性,实事上是要有条件的,不是所以属性都 ...
- 网站部署 HTTPS 中需要做的事情
这篇文章首发于我的个人网站:听说 - https://tasaid.com/,建议在我的个人网站阅读,拥有更好的阅读体验. 这篇文章与 博客园 和 Segmentfault 共享. 前端开发QQ群:3 ...
- sharepoint powershell 批量处理匿名访问
配置Web Application启用匿名访问 Add-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyCont ...
- CSS3 新怎的伪类选择器
:first-of-type p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素. :last-of-type p:last-of-typ ...
- UITabBarController 更改tabbariteam上的选中图片
首先遵守“ UITabBarControllerDelegate ”协议 再在- (void)viewDidLoad {}方法中设置代理“ self.tabBarController.delegate ...
- 【转】单例模式(singletion)
单例模式(Singleton) 原地址:http://www.cnblogs.com/BoyXiao/archive/2010/05/07/1729376.html 首先来明确一个问题,那就是在某些情 ...
- Python聊天室
小编心语:锵锵锵!各位看官注意了啊,走过路过表错过!上篇博文主要介绍了基于基于Server-Sent Event的简单在线聊天室,相信不管各位是大牛.小牛还是跟小编一样的小白,可能觉得看得不够过瘾,区 ...
- 我的第一个React Native App
我用了三天时间实现了一个相对比较完整的React Native 新闻发布类型的示例.应用做得很简单,但大多React Native的组件都有用到,今天做一个分享(由于我电脑是Windows系统,所以只 ...
- Ruby的模型关系随笔
1 Class和Module的实例方法也就是所有具体类和具体Module的类方法,因为具体类和具体Module分别是Class和Module的实例.例如Object.new对应着Class#new,K ...