推导过程 : 组合数+容斥原理+gcd

正确做法是暴力的一种优化,ans=所有情况 - 平行坐标轴的三点共线 - 斜线三点共线

如果快速求斜线三点共线:

首先要知道一个结论,对于点(a,b) (x,y)连成的线段而言(其中a>x,b>y),

在它们中间有gcd(a-x,b-x)-1个整点,因此基本的思路就是枚举两个点,

然后第3个点就是gcd(a-x,b-x)-1种可能了

至于为什么第3个点一定要在中间,是为了保证不重不漏,只用两边的点统计中间的点,

然而这样复杂度太高,于是可以发现,可以将这两个点组成的线段中左下那个端点平移至原点,

这样相当于只要枚举一个点,并且由于要考虑k<0的情况,因为矩形是有对称性的,

所以要求原点+一个点 与 (0,m)+一个点 的和就可以直接2 *(原点+一个点)

由于长的一样的线有很多,于是问题就转化为如果求这些一样的线的个数,

那么可以发现,这样任意一条线,向上只能平移(n - i),向下(m - j)次,

所以可能性就为(n - i + 1) * (m - j + 1),其中+1是因为可以向上移动0个单位

但由于这里n,m一开始就加了1,所以这个式子就不用+1了

因此枚举每个点即可

 #include<bits/stdc++.h>
using namespace std;
#define R register int
#define LL long long
LL n,m,ans,go; int gcd(int x,int y)
{
if(!y) return x;
else return gcd(y,x%y);
} void work()
{
scanf("%lld%lld",&n,&m);
++n,++m;//因为是一个网格,所以真正的坐标系其实有(n+1,m+1)
go=n*m;
ans=go * (go - ) * (go - ) / - n * m * (m - ) * (m - ) / - m * n * (n - ) * (n - ) / ;//记得除掉取出数列的全排列
for(R i=; i<n ;i++)//因为是取了原点,所以相当于坐标系是从0开始了
for(R j=; j<m ;j++)//枚举这个点
ans-=(LL) * (LL)(gcd(i,j) - ) * (LL)(n - i) * (LL)(m - j);
printf("%lld\n",ans);
} int main()
{
freopen("in.in","r",stdin);
work();
fclose(stdin);
return ;
}

[CQOI2014]数三角形 组合数 + 容斥 + gcd的更多相关文章

  1. bzoj3505 [Cqoi2014]数三角形——组合数+容斥

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3505 好题啊好题...好像还曾经出现在什么智力测试卷中来着...当时不会现在还是无法自己推出 ...

  2. BZOJ 3505: [Cqoi2014]数三角形( 组合数 )

    先n++, m++ 显然答案就是C(3, n*m) - m*C(3, n) - n*C(3, m) - cnt. 表示在全部点中选出3个的方案减去不合法的, 同一行/列的不合法方案很好求, 对角线的不 ...

  3. 【BZOJ3505】[Cqoi2014]数三角形 组合数

    [BZOJ3505][Cqoi2014]数三角形 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. ...

  4. [Cqoi2014]数三角形——组合数

    Description: 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Hint: 1<=m,n<=1000 ...

  5. 【BZOJ 3505】 [Cqoi2014]数三角形 容斥原理+排列组合+GCD

    我们先把所有三角形用排列组合算出来,再把一行一列上的三点共线减去,然后我们只观察向右上的三点共线,向左上的乘二即可,我们发现我们如果枚举所有的两边点再乘中间点的个数(GCD),那么我们发现所有的两边点 ...

  6. [CQOI2014]数三角形 题解(组合数学+容斥)

    [CQOI2014]数三角形 题解(数论+容斥) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1328780 链接题目地址:洛谷P3166 BZOJ 350 ...

  7. 「BZOJ3505」[CQOI2014] 数三角形

    「BZOJ3505」[CQOI2014] 数三角形 这道题直接求不好做,考虑容斥,首先选出3个点不考虑是否合法的方案数为$C_{(n+1)*(m+1)}^{3}$,然后减去三点一线的个数就好了.显然不 ...

  8. BZOJ 3505: [Cqoi2014]数三角形 数学

    3505: [Cqoi2014]数三角形 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  9. Bzoj 3505: [Cqoi2014]数三角形 数论

    3505: [Cqoi2014]数三角形 Time Limits: 1000 ms  Memory Limits: 524288 KB  Detailed Limits   Description

随机推荐

  1. ORB-SLAM(十二)优化

    ORB-SLAM中优化使用g2o库,先复习一下g2o的用法,上类图 其中SparseOptimizer就是我们需要维护的优化求解器,他是一个优化图,也是一个超图(包含若干顶点和一元二元多元边),怎样定 ...

  2. mysql中的直方图采样逻辑

    int handler::sample_next(uchar *buf) { // Temporary set inited to RND, since we are calling rnd_next ...

  3. 修改Eclipse中项目在Apache Tomcat中的部署路径

    在Eclipse中配项目已经部署到如下默认目录下:eclipse workspace/.metadata/.plugins/org.eclipse.core.resources/.projects. ...

  4. 「题目代码」P1054~P1059(Java)

    P1054 猴子吃桃 import java.util.*; import java.io.*; import java.math.BigInteger; import java.lang.Chara ...

  5. C# 中访问修饰符

    1.public 完全公开的,公共的 2. private 私有的,只能在当前类的内部访问, 不可修饰类 3.protected 受保护的,只能在当前类的内部以及其子类中访问,不能用来修饰类 4.in ...

  6. 解析Java中final关键字的各种用法

    首先,我们可以从字面上理解一下final这个英文单词的中文含义:“最后的,最终的; 决定性的; 不可更改的:”.显然,final关键词如果用中文来解释,“不可更改的”更为合适.当你在编写程序,可能会遇 ...

  7. 返回json数组的GET接口

    Action() { web_reg_find("Search=Body", "SaveCount=find_cnt", "Text=code\&qu ...

  8. 详解Jedis连接池报错处理

    在使用Jedis连接池模式下,比较常见的报错如下: redis.clients.jedis.exceptions.JedisConnectionException:Could not get a re ...

  9. Python3 迭代器,生成器,装饰器

    1.迭代器 迭代器有两个基本方法,iter()和next(),next()完成后会引发StopIteration异常 a='abcdef' b=iter(a) #创建迭代器对象 print(type( ...

  10. 硬件PCB Layout布局布线Checklist检查表(通用版)

    按部位分类 技术规范内容 1 PCB布线与布局 PCB布线与布局隔离准则:强弱电流隔离.大小电压隔离,高低频率隔离.输入输出隔离.数字模拟隔离.输入输出隔离,分界标准为相差一个数量级.隔离方法包括:空 ...