bzoj3505 [Cqoi2014]数三角形——组合数+容斥
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3505
好题啊好题...好像还曾经出现在什么智力测试卷中来着...当时不会现在还是无法自己推出来...
自己初步的想法是分类成有两点在一条横线上的和三点在不同横线上的;
第一类就是枚举两条横线,枚举有两点的横线上的两个位置,枚举另一点在横线上的位置,再交换两条横线;
也就是 C(n,2) * C(m,2) * m * 2;
第二类就枚举三条横线,再枚举三个位置;
也就是 C(n,3) * m * m * (m-1);
然后发现不一定 m-1,万一前两个点确定的横线在第三条横线上没有整点呢!
枚举? gcd?好像都不行...于是就萎了...
题解是随便选情况减去一条线情况,一条线分横线竖线和斜线;
对于斜线,确定一个点 (0,0),枚举一个(左下角)点 (i,j),计算一个(对角线)点 gcd(i,j)-1;
再把这个矩形平移,也就是 * (n-i) * (m-j);
再分斜线的方向,也就是 * 2;
所以枚举 i , j ,ans -= 2 * (gcd(i,j)-1) * (n-i) *(m-j);
看博客:https://www.cnblogs.com/Var123/p/5377616.html
还有:https://blog.csdn.net/u012288458/article/details/48624859
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int const maxn=1e6+;
ll n,m;
ll ans;
ll c(ll x)
{
//// c[1][1]=1;
// for(ll i=0;i<=n;i++)c[i][0]=1;
// for(ll i=2;i<=maxn;i++)
// for(int j=1;j<=3&&i>=j;j++)
// c[i][j]=c[i-1][j]+c[i-1][j-1];
return x*(x-)*(x-)/;//C(x,3)
}
ll gcd(ll a,ll b){return a%b?gcd(b,a%b):b;}
int main()
{
scanf("%lld%lld",&n,&m); n++; m++;
ans=c(n*m)-c(n)*m-c(m)*n;
for(ll i=;i<n;i++)//从0开始算点
for(ll j=;j<m;j++)
ans-=*(gcd(i,j)-)*(n-i)*(m-j);
printf("%lld",ans);
return ;
}
bzoj3505 [Cqoi2014]数三角形——组合数+容斥的更多相关文章
- [CQOI2014]数三角形 组合数 + 容斥 + gcd
推导过程 : 组合数+容斥原理+gcd 正确做法是暴力的一种优化,ans=所有情况 - 平行坐标轴的三点共线 - 斜线三点共线 如果快速求斜线三点共线: 首先要知道一个结论,对于点(a,b) (x,y ...
- 【BZOJ3505】[Cqoi2014]数三角形 组合数
[BZOJ3505][Cqoi2014]数三角形 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. ...
- BZOJ 3505: [Cqoi2014]数三角形( 组合数 )
先n++, m++ 显然答案就是C(3, n*m) - m*C(3, n) - n*C(3, m) - cnt. 表示在全部点中选出3个的方案减去不合法的, 同一行/列的不合法方案很好求, 对角线的不 ...
- [bzoj3505][CQOI2014]数三角形_组合数学
数三角形 bzoj-3505 CQOI-2014 题目大意:给你一个n*m的网格图,问你从中选取三个点,能构成三角形的个数. 注释:$1\le n,m\le 1000$. 想法:本来是想着等中考完了之 ...
- [bzoj3505 Cqoi2014] 数三角形 (容斥+数学)
传送门 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正 ...
- BZOJ3505 [Cqoi2014]数三角形
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- BZOJ3505 CQOI2014数三角形(组合数学)
显然可以用总方案数减掉三点共线的情况.对于三点共线,一个暴力的做法是枚举起点终点,其间整点数量即为横纵坐标差的gcd-1.这样显然会T,注意到起点终点所形成的线段在哪个位置是没有区别的,于是枚举线段算 ...
- bzoj3505: [Cqoi2014]数三角形 [数论][gcd]
Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和 ...
- 【排列组合】bzoj3505 [Cqoi2014]数三角形
http://blog.csdn.net/zhb1997/article/details/38474795 #include<cstdio> #include<algorithm&g ...
随机推荐
- 16位/32位/64位CPU的位究竟是说啥
平时,我们谈论CPU,都会说某程序是32位编译,可以跑在32位机或64位机,或则是在下载某些开源包时,也分32位CPU版本或64CPU位版本,又或者在看计算机组成相关书籍时,特别时谈到X86 CPU时 ...
- ThinkPHP---thinkphp文件加载
[一]文件加载在ThinkPHP里提供了三种方式 实际开发里,文件加载方式一般以第一种为主(通过函数库形式自动加载,此时我们仅仅需要定义文件和函数) (1)函数库形式加载 函数库分3种级别,系统函数库 ...
- ThinkPHP---thinkphp框架介绍
目录: (1)简述: (2)下载: (3)文件结构: (4)部署: (5)细节问题: 主体: (1)简述 ThinkPHP诞生于2006年初,最初叫FSC.于2007年元旦更名为PHP,同时官网上线. ...
- php切换版本之后 redis 安装使用
一:redis安装Download, extract and compile Redis with: $ wget http://download.redis.io/releases/redis-3. ...
- 继 S-HR之代码创建临时表并插入数据 完整功能之员工职业信息变更报表
目的示例1: 制作员工职业信息报表[S-HR系统的报表其实就是列表o.0,醉了] EcirrWithPP.js shr.defineClass("shr.custom.EcirrWithPP ...
- Luogu P4014 「 网络流 24 题 」分配问题
解题思路 还是建立超级源点和超级汇点,又因为题目给出规定一个人只能修一个工件,所以建图的时候还要讲容量都设为$1$. 人的编号是$1\rightarrow n$,工件的编号是$n+1\rightarr ...
- MyBatis 的基本要素—核心对象
MyBatis 三个基本要素 ➢ 核心接口和类 ➢ MyBatis 核心配置文件(mybatis-config.xml) ➢ SQL 映射文件(mapper.xml) MyBatis 核心接口和类 ...
- http怎么做自动跳转https
Nginx版本 server { listen 80; server_name localhost; rewrite ^(.*)$ https://$host$1 permanent; ...
- VScode输出中文乱码的解决方法------测试过可以用
用python写个爬虫,配置个VScode环境,发现输出都是乱码,翻阅网站后发现一个简单有效的方法,在此谢过网络上的大牛们的无私分享,我也在此记录一下,以备后用: 文件---->首选项----& ...
- 将Jquery EasyUI中DataGird的数据导入Excel中
1.第一步获取前台DataGrid中的数据 var rows = $('#tb).datagrid("getRows"); if (rows.length = ...