Description

  给定一个n*m的网格,请计算三个点都在格点上的三角形共有多少个。下图为4*4的网格上的一个三角形。 
          
  注意三角形的三点不能共线。

Input

输入一行,包含两个空格分隔的正整数m和n。

Output

输出一个正整数,为所求三角形的数量。

Sample Input

样例输入1:1 1

样例输入2:2 2

Sample Output

样例输出1:4

样例输出2:76

先求出全集,再去掉三点共线的情况。

那如何枚举三点共线的情况呢?先将横竖两种情况算了,再考虑斜着的。枚举斜着的方法有很多,但比较可行的是先固定两个点,再计算两个点之间的点数。具体实现就是枚举两点的相对位置,也可以理解为向量,然后就有个位置可以当左上角的点。这两点之间的点数就是。最后还要,对称性嘛。

这么枚举的好处是,两点之间的相对位置去确定了之后,中间点的数量就确定了。

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<ctime>
#define ll long longusing namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}ll n,m;
ll ans,tot;
ll gcd(ll a,ll b) {return !b?a:gcd(b,a%b);}
int main() {n=Get(),m=Get();n++,m++;tot=n*m;ans=tot*(tot-1)/2*(tot-2)/3;if(n>=3) ans-=n*(n-1)/2*(n-2)/3*m;if(m>=3) ans-=m*(m-1)/2*(m-2)/3*n;for(int i=1;i<n;i++) {for(int j=1;j<m;j++) {ans-=(n-i)*(m-j)*(gcd(i,j)-1)*2;}}cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/hchhch233/p/9735818.html

BSOJ 3899 -- 【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. P3166 [CQOI2014]数三角形(组合数学)

    P3166 [CQOI2014]数三角形(组合数学) 整点三角形个数. 正难则反,求出总方案和共线三角形方案数即可. 总方案:C((n+1)(m+1),3)C((n+1)(m+1),3)C((n+1) ...

  3. BZOJ 3505 [Cqoi2014]数三角形(组合数学)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题目大意] 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注 ...

  4. [CQOI2014]数三角形 题解(找规律乱搞)

    题面 其实这道题不用组合数!不用容斥! 只需要一个gcd和无脑找规律(滑稽 乍一看题目,如果单纯求合法三角形的话情况太多太复杂,我们可以从局部入手,最终扩展到整体. 首先考虑这样的情况: 类似地,我们 ...

  5. bzoj 3505: [Cqoi2014]数三角形

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 970  Solved: 595 [Submit][Status][Discuss] Descript ...

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

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

  7. 洛谷 P3166 [CQOI2014]数三角形(gcd+组合计数)

    题目描述 给定一个 N×MN\times MN×M 的网格,请计算三点都在格点上的三角形共有多少个.注意三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数 MMM 和 NNN . 输 ...

  8. P3166 [CQOI2014]数三角形

    文章目录 ResultResultResult HyperlinkHyperlinkHyperlink DescriptionDescriptionDescription SolutionSoluti ...

  9. P3166 [CQOI2014]数三角形(结论)

    https://www.luogu.com.cn/problem/P3166 思路: cf也有一道几乎一致的题,但是那题是2e3个点,可以n^2logn,先算出总数C(n,3),然后预处理经过某个点的 ...

  10. [CQOI2014]数三角形 组合数 + 容斥 + gcd

    推导过程 : 组合数+容斥原理+gcd 正确做法是暴力的一种优化,ans=所有情况 - 平行坐标轴的三点共线 - 斜线三点共线 如果快速求斜线三点共线: 首先要知道一个结论,对于点(a,b) (x,y ...

最新文章

  1. IOS的钥匙串,确保本地隐私数据的安全
  2. 我敢打赌!你见过的所有程序员都是这样的!!!
  3. 寒武纪招聘|智能驾驶类、算法类、软件类、芯片类等岗位(校招/社招)
  4. vc获取n卡编号_电脑入门知识:通过显卡型号中字母和数字判断显卡性能
  5. 查看swintransformer的网络结构
  6. div 文字 input 垂直居中
  7. HDU 2552 A simple problem
  8. BZOJ2241 [SDOI2011]打地鼠 【模拟】
  9. 学习Android 应注意的十个问题
  10. 史上最强NLP知识集合:知识结构、发展历程、导师名单
  11. linux安装软件火狐浏览器,火狐浏览器linux怎么样安装
  12. chrome js 读取文件夹_javascript – 如何从chrome扩展程序读取文件?
  13. BaoStock:使用python的baostock接口,查询除权除息信息
  14. 图片的旋转,缩放和拖拽
  15. 计算机专业BA和BS有啥区别,美国读大学选专业BA和BS有什么区别?
  16. 关于Gitlab修改用户名和邮箱
  17. seo整站优化详细教程下载
  18. html右侧导航栏固定,固定导航栏.html
  19. MySQL基础查询(单表查询)
  20. 爬虫——百度图片爬取

热门文章

  1. winform程序读取和改写配置文件App.config元素的值
  2. oracle awr 修改Snapshots设置
  3. Cacti on nginx + php-fpm
  4. .Net 引用命名空间
  5. 闲诗一首:《扬州即行》
  6. HDU 4466 Triangle(计数)
  7. 关于MYSQL 字符转义问题总结
  8. 操纵BGP AS-PATH 属性案例(配图+详细验证过程)
  9. C++中的向上类型转换和向下类型转换+四种强制类型转换
  10. 初识vue 2.0(2):路由与组件