推导过程 : 组合数+容斥原理+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. 开胃小菜——impress.js代码详解

    README 友情提醒,下面有大量代码,由于网页上代码显示都是同一个颜色,所以推荐大家复制到自己的代码编辑器中看. 今天闲来无事,研究了一番impress.js的源码.由于之前研究过jQuery,看i ...

  2. Ruby 基础教程1-6

    1.循环实现方法 循环语句 (while;for; loop,until) 循环方法(times,each) 2.for           for 变量 in 对象             主体   ...

  3. java中的比较:instanceof、equals(hashcode)、==

    import javassist.expr.Instanceof; class Person{ String s; Person(String s){ this.s=s; } } class Man ...

  4. C++11 TypeList 妙用

    源码展示: #include <iostream> using namespace std; template <typename ... Args> struct typel ...

  5. [Clr via C#读书笔记]Cp9参数

    Cp9参数 可选参数和命名参数 参数设置了默认值(设置要从右到左,有默认值的参数必须放在没有默认值的参数的后面,默认值必须是常量),就可以使用可选参数和命名参数了.向方法传递实参的时候,编译器按照从左 ...

  6. 手动在Windows上创建kafka环境

    一 主要内容请移步 参考文章 二 一点小问题 安装上面的参考文章完成配置,并且尝试传输消息后,我尝试去查看kafka的消息数据,目录是{logdir}/test-0/00000000000000.lo ...

  7. LeetCode - 566. Reshape the Matrix (C++) O(n)

    1. 题目大意 根据给定矩阵,重塑一个矩阵,r是所求矩阵的行数,c是所求矩阵的列数.如果给定矩阵和所求矩阵的数据个数不一样,那么返回原矩阵.否则,重塑矩阵.其中两个矩阵中的数据顺序不变(先行后列). ...

  8. jQuery 调用后台方法(net)

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs ...

  9. HTML5+Bootstrap 学习笔记 1

    HTML <header> 标签 <header> 标签定义文档的页眉(介绍信息),是 HTML 5 中的新标签. 参考资料: HTML <header> 标签 h ...

  10. 2.hbase原理(未完待续)

    hbase简介相关概念hmsterhregionserver表regionhstorememstorestorefilehfileblockcacheWALminorcompactmajorcompa ...