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 ...
随机推荐
- 安装ubuntu16.04系统后没有无线网络选项的解决方法
ubuntu系统是自带有无线网络驱动的,因此最好的解决办法是安装是把联网更新选项勾选上,这样在安装是就能自动把无线网络驱动配置好 这是一个比较有效的解决没有无线网络驱动的方法,比后续按网络上的教程自己 ...
- Hadoop Single Node Setup(hadoop本地模式和伪分布式模式安装-官方文档翻译 2.7.3)
Purpose(目标) This document describes how to set up and configure a single-node Hadoop installation so ...
- 如何快速创建提交一个项目到Github
1.https://github.com创建一个repository 2.本地创建一个文件夹A 3.命令行转到新文件夹A,执行git init使其能被git管理,并生成.git隐藏文件 4.如内容,应 ...
- SecureFX 中文乱码
1. 找到SecureFX配置文件夹(选项–全局选项,常规下的配置文件夹),比如:C:\Users\James\AppData\Roaming\VanDyke\Config\Sessions 2. ...
- 审核被拒绝。附近??Guideline 5.1.2
5. 1.2 Legal: Privacy - Data Use and Sharing Guideline 5.1.2 - Legal - Privacy - Data Use and Sharin ...
- Ubuntu 16.04配置国内高速apt-get更新源
https://www.linuxidc.com/Linux/2017-11/148627.htm Ubuntu 16.04下载软件速度有点慢,因为默认的是从国外下载软件,那就更换到国内比较好的快速更 ...
- mysql ifnull判断为空设置默认值
IFNULL(count,0) as count select IFNULL(count,0) as count from table_name 可以设置当某个字段为空的时候默认值.
- 查看win信任的证书办法机构(CA机构的公钥)
cmd mmc
- 实习培训——Servlet(6)
实习培训——Servlet(6) 1 Servlet 客户端 HTTP 请求 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的 ...
- PAT 1074 Reversing Linked List[链表][一般]
1074 Reversing Linked List (25)(25 分) Given a constant K and a singly linked list L, you are suppose ...