bzoj3505 / P3166 [CQOI2014]数三角形
前置知识:某两个点$(x_{1},,y_{1}),(x_{2},y_{2})\quad (x_{1}<x_{2},y_{1}<y_{2})$所连成的线段穿过整点的个数为$gcd(x_{2}-x_{1},y_{2}-y_{1})-1$
“注意三角形的三点不能共线。”
暗示你可以处理出总方案再减去三点共线的方案。
显然,总方案就是在$(n+1)*(m+1)$个点中任选$3$个。于是$tot=C((n+1)*(m+1),3)$
现在我们要算出三点共线的方案
对于直线上的三点共线,显然$tot1=n*C(m,3)+m*C(n,3)$
对于斜线上的三点共线,我们可以根据前置知识↑↑枚举。
然鹅暴力枚举复杂度是达到$O(n^{2}m^{2})$的
所以我们需要转化
注意到其实我们可以只枚举$l=x_{2}-x_{1},r=y_{2}-y_{1}$,相当于把这两个数据看做一个矩形的长和宽。
蓝后我们要算出整个大矩形中有几个这样的小矩形:$(n-l+1)*(m-r+1)$
每个矩形中包含$2$条对角线,所以$tot2*=2$
所以斜线上的三点共线$tot2=\sum_{i=1}^{n}\sum_{j=1}^{m}(gcd(i,j)-1)*(n-i+1)*(m-j+1)$
代码中为了方便事先把$n,m$都$+1$
#include<iostream>
#include<cstdio>
#include<cstring>
#define re register
using namespace std;
typedef long long ll;
ll m,n,ans;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int main(){
scanf("%lld%lld",&n,&m);++n;++m;
ll tmp=n*m;
ans=tmp*(tmp-)*(tmp-)/;
ans-=n*m*(m-)*(m-)/;
ans-=m*n*(n-)*(n-)/;//减去横向和纵向的三点共线
for(int i=;i<n;++i)
for(int j=;j<m;++j)
ans-=1ll*(gcd(i,j)-)*(n-i)*(m-j)*;
printf("%lld",ans);
return ;
return ;
}
bzoj3505 / P3166 [CQOI2014]数三角形的更多相关文章
- 【BZOJ3505】[Cqoi2014]数三角形 组合数
[BZOJ3505][Cqoi2014]数三角形 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. ...
- 【bzoj3505】[Cqoi2014]数三角形
[bzoj3505][Cqoi2014]数三角形 2014年5月15日3,5230 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4×4的网格上的一个三角 ...
- 「BZOJ3505」[CQOI2014] 数三角形
「BZOJ3505」[CQOI2014] 数三角形 这道题直接求不好做,考虑容斥,首先选出3个点不考虑是否合法的方案数为$C_{(n+1)*(m+1)}^{3}$,然后减去三点一线的个数就好了.显然不 ...
- BZOJ3505 & 洛谷P3166 [Cqoi2014]数三角形 【数学、数论】
题目 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数m和n. 输出格式 输出 ...
- 【bzoj3505】 Cqoi2014—数三角形
http://www.lydsy.com/JudgeOnline/problem.php?id=3505 (题目链接) 题意 给定一个n*m的网格,请计算三点都在格点上的三角形共有多少个. Solut ...
- 【bzoj3505】[Cqoi2014]数三角形 容斥原理
题目描述 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. 输入 输入一行,包含两个空格分隔的正整数m和n. 输出 输出一个 ...
- 【题解】洛谷P3166 [CQOI2014] 数三角形(组合+枚举)
洛谷P3166:https://www.luogu.org/problemnew/show/P3166 思路 用组合数求出所有的3个点组合(包含不合法的) 把横竖的3个点共线的去掉 把斜的3个点共线的 ...
- P3166 [CQOI2014]数三角形
传送门 直接求还要考虑各种不合法情况,不好计数 很容易想到容斥 把所有可能减去不合法的情况剩下的就是合法情况 那么我们只要任取不同的三点就是所有可能,不合法情况就是三点共线 对于两点 $(x_1,y_ ...
- 洛谷P3166 [CQOI2014]数三角形
题目描述 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形.注意三角形的三点不能共线. 输入输出格式 输入格式: 输入一行,包含两个空格分隔的正整数m和n ...
随机推荐
- iOS Swift 实现图片点击缩放回弹动画
效果就是下面这个样子: 思路借鉴的是MZTimerLabel,有想过做一个自定义的ImageView,但那样的话之前view用必须要改代码,索性就按照MZTimerLabel这个方式实现,简单易用,从 ...
- HDU 3903 Trigonometric Function(数学定理)
Trigonometric Function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Oth ...
- FW 编译Android系统源码和内核源码
编译Android系统源码和内核源码 分类: Android2014-07-21 20:58 7287人阅读 评论(28) 收藏 举报 好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现 ...
- Ubuntu16.04 搜狗输入法输入汉字时候选栏是一串字符数字乱码问题解决方法
https://blog.csdn.net/liudahanghang/article/details/80494851 1. 如果是刚装完搜狗输入法,则输入命令:sudo apt-get insta ...
- vue中给请求到的数据对象加属性问题
今天发现了个很奇怪的问题,我在做一个:点击列表 使点中的列表项变色的功能,而且是多个大列表项,在每个大列表项里点击切换列表项的时候不影响其他大列表项的选项. 解决思路,因为这些大列表项是请求到的数据 ...
- 洛谷P3527 MET-Meteors [POI2011] 整体二分
正解:整体二分 解题报告: 传送门! 还有个双倍经验!(明明是一样的题目为什么你们一个紫一个黑啊喂! 这题首先要想到可以二分嘛,然后看到多组询问肯定就整体二分鸭 那就是基本套路啊,发现是区间修改单点查 ...
- 【Python】如何切换浏览器的tap页?
当点击浏览器当前页面中的某个链接后自动弹出一个新的浏览器的tap页面时,浏览器正常都会在当前操作的tap页面右1位置打开新弹出的tap页. 当前selenium还不具备自动切换页面后窗口切换功能.需要 ...
- vue学习之四组件系统
vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文详细介绍使用vue.js进行页面布局的强大工具,vue.js组件系统. 一.Vue.js组件系统 每一个 ...
- myeclipse maven工程调试调试
1:使用了maven带的tomca插件进行启动.下面讲一下如何进行调试程序 2:在程序中打断点 3:选择>debug>debug configuration 在goals处添加启动命令 4 ...
- checkbox选择
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...