传送门

直接求还要考虑各种不合法情况,不好计数

很容易想到容斥

把所有可能减去不合法的情况剩下的就是合法情况

那么我们只要任取不同的三点就是所有可能,不合法情况就是三点共线

对于两点 $(x_1,y_1)\ ,\ (x_2,y_2)$ ,它们之间有 $gcd(\left | x_1-x_2 \right |,\left | y_1-y_2 \right |)-1$ 个交点

证明?因为第三点C如果在两点A,B间的线上

那么$\frac{\left | x_A-x_C \right |}{ \left | y_A-y_C \right |}=\frac{\left | x_A-x_B \right |}{ \left | y_A-y_B \right |}$

因为 $x_C,y_C$ 为整数且在A,B之间,所以只有 $gcd(\left | x_A-x_B \right |,\left | y_A-y_B \right |)-1$ 个位置可取

自己画个图感性理解一下就好了

所以一个直接的思路就是枚举所有两个点A,B,算出C的数量

但是可以发现有很多线段AB其实本质是一样的,只是位置不同,我们可以通过平移来得到

把点A固定在原点上,然后枚举B,这样可以得到所有本质不同的线段

然后考虑有多少种平移方案

设 B 坐标为 (X,Y),那么线段可以向上平移最多 N-Y 个单位,向右平移最多 M-X 个单位

因为可以平移 0 个单位,所以共有 (N-Y+1)(M-X+1) 种方案

因为AB斜率可以为负,所以要把之前求出来的方案数再乘 2

在坐标系中任选3点的方案数为 $C_{(N+1)(M+1)}^{3}$

别忘了减去三点横坐标相同或纵坐标相同的情况:

对于每条横线,都有 $C_{M+1}^{3}$种方案,共 N 条横线

对于每条纵线,也是一样,为 $M*C_{N+1}^{3}$

别忘了开 long long

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
int n,m,t;
ll ans;
int gcd(int a,int b) { return b ? gcd(b,a%b) : a; }
int main()
{
n=read()+; m=read()+;
t=n*m;
ans=1ll*t*(t-)*(t-)/(**) - 1ll* m* n*(n-)*(n-)/(**) - 1ll* n* m*(m-)*(m-)/(**);
//总方案数 - 纵线不合法方案 - 横线不合法方案
for(int i=;i<n;i++)//枚举点B纵坐标
for(int j=;j<m;j++)//横坐标
ans-=1ll*(n-i)*(m-j)*(gcd(i,j)-)*;//减去斜线不合法方案数
printf("%lld",ans);
return ;
}

P3166 [CQOI2014]数三角形的更多相关文章

  1. bzoj3505 / P3166 [CQOI2014]数三角形

    P3166 [CQOI2014]数三角形 前置知识:某两个点$(x_{1},,y_{1}),(x_{2},y_{2})\quad (x_{1}<x_{2},y_{1}<y_{2})$所连成 ...

  2. BZOJ3505 & 洛谷P3166 [Cqoi2014]数三角形 【数学、数论】

    题目 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数m和n. 输出格式 输出 ...

  3. 【题解】洛谷P3166 [CQOI2014] 数三角形(组合+枚举)

    洛谷P3166:https://www.luogu.org/problemnew/show/P3166 思路 用组合数求出所有的3个点组合(包含不合法的) 把横竖的3个点共线的去掉 把斜的3个点共线的 ...

  4. 洛谷P3166 [CQOI2014]数三角形

    题目描述 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形.注意三角形的三点不能共线. 输入输出格式 输入格式: 输入一行,包含两个空格分隔的正整数m和n ...

  5. Luogu P3166 [CQOI2014]数三角形 组合数学

    好题鸭.. 不好直接求三角形个数,那就用全集-补集,转化为求三点共线的数量. 具体求法是求出水平共线数量与竖直共线数量和斜线共线数量. 用排列组合的知识可知为水平和竖直的为$C_n^3$​与$C_m^ ...

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

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

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

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

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

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

  9. bzoj 3505: [Cqoi2014]数三角形 组合数学

    3505: [Cqoi2014]数三角形 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 478  Solved: 293[Submit][Status ...

随机推荐

  1. Android键盘属性

    在主xml中android:windowSoftInputMode的属性"stateUnspecified"软键盘的状态(是否它是隐藏或可见)没有被指定.系统将选择一个合适的状态或 ...

  2. 卸载sql2008r2简易版

    Sql Server 2008完全卸载方法(其他版本类似)第1/2页作者: 字体:[增加 减小] 类型:转载 本文介绍如何卸载 Microsoft SQL Server 2008的方法.当您按照本文中 ...

  3. php二维数组排序方法(array_multisort,usort)

    一维数组排序可以使用asort.ksort等一些方法进程排序,相对来说比较简单.二维数组的排序怎么实现呢?使用array_multisort和usort可以实现 例如像下面的数组: $users = ...

  4. ROS Learning-005 beginner_Tutorials 创建ROS程序包(就是软件包)

    ROS Indigo beginner_Tutorials-04 创建ROS程序包(就是软件包) 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu ...

  5. PCL—点云分割(最小割算法) 低层次点云处理

    1.点云分割的精度 在之前的两个章节里介绍了基于采样一致的点云分割和基于临近搜索的点云分割算法.基于采样一致的点云分割算法显然是意识流的,它只能割出大概的点云(可能是杯子的一部分,但杯把儿肯定没分割出 ...

  6. wpf仿qq边缘自动停靠,支持多屏

    wpf完全模仿qq边缘自动隐藏功能,采用鼠标钩子获取鼠标当前状态,在通过当前鼠标的位置和点击状态来计算是否需要隐藏. 以下是实现的具体方法: 一.鼠标钩子实时获取当前鼠标的位置和点击状态 /// &l ...

  7. python3-字典的循环

    # Auther: Aaron Fan info = { 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex ...

  8. Django框架 之 ORM 常用字段和参数

    Django框架 之 ORM 常用字段和参数 浏览目录 常用字段 字段合集 自定义字段 字段参数 DateField和DateTimeField 关系字段 ForeignKey OneToOneFie ...

  9. U盘刻录14.10镜像出问题的解决方法

    从几个月前的14.10 daily 版本就有U盘刻录无法启动的现象,相关bug可参见:https://bugs.launchpad.net/ubunt ... reator/+bug/1325801 ...

  10. 【Android小技巧】android 按键如何能自动触发点击

    使用button.performClick();方法 EditText 中hint的字体跟 textSize的字体大小一样大