[CQOI2014]数三角形 题解(组合数学+容斥)
[CQOI2014]数三角形 题解(数论+容斥)
标签:题解
阅读体验:https://zybuluo.com/Junlier/note/1328780
链接题目地址:洛谷P3166 BZOJ 3505
思想还是很巧妙的。。。(对于我这种菜鸡)
理解题意
首先它说\(n×m\)的网格,实际上是有\((n+1)×(m+1)\)个点来放三角形的顶点
然后就是算三角形的个数
怎么做
PS:以下所讲的所有\(n\)都是\(n+1\),\(m\)也是
可以用\(\dbinom{n×m}{3}\)算出网格中选出三个点的方案数再容斥掉不是三角形的方案是吧
想一下什么情况下不是三角形:那肯定当且仅当三点共线时啊
那么怎么把三点共线的方案数算出来呢
分两种情况:
- 三点共线的直线平行于\(x\)或\(y\)轴:那很简单直接组合数减掉\(\dbinom{n}{3}\)和\(\dbinom{m}{3}\)
- 三点共线的直线是个斜的,这个有点困难啊。。。具体看下面
首先想一个\(O(n^4)\)做法
考虑枚举三个点两端的两个点(为了不算重所以枚举两端的点)\((x,y),(X,Y)\)
显然以这两个点为两端的共线方案数就是这条线中间经过的整点数是吧
我们会得到一个结论:方案数\(=GCD(X-x,Y-y)-1\)(画个图自己应该很好理解。。。)
怎么优化成\(O(n^2)\)
我们发现其实很多直线其实长得是一样的对吧,只是放的位置不一样而已
我们考虑把这些长得一样的直线一起处理
那我们直接把\((x,y)\)当做原点,枚举\((X,Y)\)
会发现其实那些和他长得一样的直线相当于是在这种情况下于坐标网格中有限制地移动是吧
那么计算出它可以移动的方案数
这个很容易算,不就是网上移动不过\((n-X)\)次,往右移动\((m-Y)\)次嘛
那么具体算出来就是\((n-X)*(m-Y)\)次了,再乘上\(GCD(X,Y)-1\)就是要减去的辣(当然只枚举了\((X,Y)\),斜率是正的,斜率是负的就只要反过来,于是我们\(×2\))
可能有些不清楚,那么具体看代码实现
\(code\)
#include<bits/stdc++.h>
#define il inline
#define rg register
#define ldb double
#define lst long long
#define rgt register int
#define N
using namespace std;
const int Inf=1e9;
il int MAX(rgt x,rgt y){return x>y?x:y;}
il int MIN(rgt x,rgt y){return x<y?x:y;}
il int read()
{
int s=0,m=0;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')m=1;ch=getchar();}
while( isdigit(ch))s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
return m?-s:s;
}
lst n,m,tot;
lst Ans;
lst GCD(rg lst x,rg lst y){return y?GCD(y,x%y):x;}
int main()
{
n=read()+1,m=read()+1,tot=n*m;
Ans=tot*(tot-1)*(tot-2)/6;
Ans-=n*m*(m-1)*(m-2)/6+m*n*(n-1)*(n-2)/6;
for(rg lst i=1;i<n;++i)
for(rg lst j=1;j<m;++j)
Ans-=2LL*(GCD(i,j)-1)*(n-i)*(m-j);
return printf("%lld\n",Ans),0;
}
[CQOI2014]数三角形 题解(组合数学+容斥)的更多相关文章
- [bzoj3505][CQOI2014]数三角形_组合数学
数三角形 bzoj-3505 CQOI-2014 题目大意:给你一个n*m的网格图,问你从中选取三个点,能构成三角形的个数. 注释:$1\le n,m\le 1000$. 想法:本来是想着等中考完了之 ...
- [CQOI2014]数三角形 题解(找规律乱搞)
题面 其实这道题不用组合数!不用容斥! 只需要一个gcd和无脑找规律(滑稽 乍一看题目,如果单纯求合法三角形的话情况太多太复杂,我们可以从局部入手,最终扩展到整体. 首先考虑这样的情况: 类似地,我们 ...
- BZOJ 3505 [Cqoi2014]数三角形(组合数学)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题目大意] 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注 ...
- BZOJ3505 CQOI2014数三角形(组合数学)
显然可以用总方案数减掉三点共线的情况.对于三点共线,一个暴力的做法是枚举起点终点,其间整点数量即为横纵坐标差的gcd-1.这样显然会T,注意到起点终点所形成的线段在哪个位置是没有区别的,于是枚举线段算 ...
- bzoj 3505: [Cqoi2014]数三角形 组合数学
3505: [Cqoi2014]数三角形 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 478 Solved: 293[Submit][Status ...
- 「BZOJ3505」[CQOI2014] 数三角形
「BZOJ3505」[CQOI2014] 数三角形 这道题直接求不好做,考虑容斥,首先选出3个点不考虑是否合法的方案数为$C_{(n+1)*(m+1)}^{3}$,然后减去三点一线的个数就好了.显然不 ...
- 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
- 【BZOJ3505】[Cqoi2014]数三角形 组合数
[BZOJ3505][Cqoi2014]数三角形 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. ...
随机推荐
- mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz下载安装
一 ,mysql下载 需要注册,可以通过组合url越过注册下载需要的包. 下载地址: https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.3 ...
- C++ - 操作运算符
一.操作运算符 操作运算符:在C++中,编译器有能力将数据.对象和操作符共同组成表达式,解释为对全局或成员函数的调用 该全局或成员函数被称为操作符函数,程序员可以通过重定义函数操作符函数,来达到自己想 ...
- sqli-labs(28)---原创原创自此一家
0X01构造闭合 ’报错 )报错 其他不报错 那我们猜想是不是')的闭合 ?id=')=('1 返回正确 那么好像猜对了 0X02爆表名 过滤了相连接的union和select ?id= 这里过滤了相 ...
- sqli-lab(8)
布尔型单引号GET盲注 发现加个单引号跟没加显示不一样,加了单引号连you are in都不显示了,没有报错,所以只能用盲注判断了 0X01爱之先了解 盲注需要掌握一些MySQL的相关函数:lengt ...
- Java并发编程的艺术笔记(三)——Thread.join()
t.join()方法只会使主线程进入等待池并等待t线程执行完毕后才会被唤醒.并不影响同一时刻处在运行状态的其他线程.它能够使得t.join()中的t优先执行,当t执行完后才会执行其他线程.能够使得线程 ...
- java后台转json、转对象、转list集合
前台数据传递到后台转json 1.普通格式转换成对象 String data=request.getParameter("data"); //单数据的时候转换方式 JSONObje ...
- 【机器学习速成宝典】模型篇03逻辑斯谛回归【Logistic回归】(Python版)
目录 一元线性回归.多元线性回归.Logistic回归.广义线性回归.非线性回归的关系 什么是极大似然估计 逻辑斯谛回归(Logistic回归) 多类分类Logistic回归 Python代码(skl ...
- 如何让css与js分离
在 webpack 我们如何让 css 与 js 分离: 我们需要安装插件:extract-text-webpack-plugin 1. 用:npm 下载插件 npm install extract- ...
- webrtc相关概念
SDP Session Description Protocol Session Traversal Utilities for NAT(STUN)Traversal Using Relays aro ...
- 【洛谷T89353 【BIO】RGB三角形】
题目链接 这个题我一开始显然直接暴力 然后30分(但是应用数据分治的我通过复杂度判断并且其余输出0的能力硬生生的拿下了60分) 主要还是讲正解 这里有一个结论 这样一个图,红点的值可以通过两个黄点来判 ...