Description

给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个。

下图为4x4的网格上的一个三角形。

注意三角形的三点不能共线。

Input

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

Output

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

HINT

数据范围
$1\leqslant m,n \leqslant 1000$

  这道题一眼看去有一个非常显然的想法,那就是先用组合数算出任选三点出来的方案数,最后再减去三点共线的情况即可。那么关键就在于如何求三点共线的数目。

  首先,我们要用到一个公式:设两个整点分别为$(x_1,y_1)$,$(x_2,y_2)$,那么两点之间连线上的整点数目为$gcd(|x_2-x_1|,|y_2-y_1|)$。

  我觉得这个公式需要证明一下(其实很简单)。

  首先,这条直线可以平移一下,使得$x_1=y_1=0$。为了考虑方便,我们这里还设$x_2 \geqslant 0,y_2 \geqslant 0$

  设$\Delta x=x_2,\Delta y =y_2$(只是为了好看一点),连线上整点的坐标为$(x,y)$,那么显然有:$$\frac{x}{\Delta x}=\frac{y}{\Delta y}$$

  设$r=gcd(\Delta x,\Delta y)$,$\Delta x=ar$,$\Delta y=br$,那么有:$$xb=ya$$

  由于$a,b$互质,$x,y$为整数,于是我们就得到了$$x=ka,y=kb(k \in Z)$$;

  由于$0 \leqslant x \leqslant \Delta x,0\leqslant y \leqslant \Delta y$且$x,y$为整数

  所以$x,y$的取值共有$\Delta x / a=\Delta y/b=gcd(\Delta x,\Delta y)$种

  除去$x=\Delta x,y=\Delta y$这组解,这两点连线上共有$gcd(\Delta x,\Delta y)-1$个整点。

  接下来我们可以直接枚举线段,然后计算有线段上有多少个整点;然而这样复杂度是$O(n^2m^2)$的。

  然后,显然每一条线段经过平移,使它的左端点在矩形左下角或者左上角。由于向下和向上的线段对称,所以只需要计算一种即可。

  所以就固定一个端点为$(0,0)$,枚举另外一个端点在哪里,计算一下即可。

  下面贴代码(话说这么一道题我好像讲复杂了):

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout) using namespace std;
typedef long long llg; int n,m;
llg ans,x; int gcd(int a,int b){
if(!b) return a;
int r=a%b;
while(r) a=b,b=r,r=a%b;
return b;
} int main(){
File("a");
scanf("%d %d",&n,&m);
x=(n+1)*(m+1); ans=x*(x-1)*(x-2)/6;
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
if(i|j){
llg x=(llg)(n-i+1)*(llg)(m-j+1);
ans-=x*(llg)(gcd(i,j)-1);
if(i && j) ans-=x*(llg)(gcd(i,j)-1);
}
printf("%lld",ans);
return 0;
}

BZOJ 3505 【Cqoi2014】 数三角形的更多相关文章

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

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

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

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

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

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

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

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

  5. BZOJ 3505: [Cqoi2014]数三角形 [组合计数]

    3505: [Cqoi2014]数三角形 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注意三角形的三点不能共线. 1<=m,n<=1000 $n++ m++$ $ans ...

  6. BZOJ 3505 [Cqoi2014]数三角形

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

  7. bzoj 3505 [Cqoi2014]数三角形(组合计数)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题意] 在n个格子中任选3点构成三角形的方案数. [思路] 任选3点-3点共线 ...

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

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

  9. bzoj 3505 [Cqoi2014]数三角形——排列组合

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3505 好题!一定要经常回顾! 那个 一条斜线上的点的个数是其两端点横坐标之差和纵坐标之差的g ...

  10. bzoj 3505 [Cqoi2014]数三角形 组合

    ans=所有的三点排列-共行的-共列的-斜着一条线的 斜着的枚举每个点和原点的gcd,反过来也可以,还能左右,上下挪 #include<cstdio> #include<cstrin ...

随机推荐

  1. HTTP 2.0与HTTP 1.1区别

    1.什么是HTTP 2.0 HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网.HTTP/2是HTTP协议自1999年HTTP 1.1发布 ...

  2. CS.动态加载DLL.动态生成.运行代码.BS.AutoFac管理实现类

    以英雄联盟为例.界面上经常有Load....xxxx.dll.一般都是加载子系统.比如装备系统.英雄系统等.在实际开发中很多项目非常庞大.都会分割成独立子解决方案开发.后期就需要加载回来.一般都是利用 ...

  3. 推荐15款响应式的 jQuery Lightbox 插件

    利用现代 Web 技术,网络变得越来越轻巧与.模态框是突出展现内容的重要形式,能够让用户聚焦到重要的内容上去.在这个列表中,我们编制了15款响应式的 jQuery 灯箱库,这将有助于开发人员创建和设计 ...

  4. 12种不适宜使用的javascript语法

    1. == (o゜▽゜)o☆[BINGO!] Javascript有两组相等运算符,一组是==和!=,另一组是===和!==.前者只比较值的相等,后者除了值以外,还比较类型是否相同. 请尽量不要使用前 ...

  5. 解决xcode升级之后安装的插件失效

    title: 解决xcode升级之后安装的插件失效date: 2015-08-23 11:07:53categories: 编辑工具 tags: xcode 我的博客:http://daycoding ...

  6. 《javascript权威指南》读书笔记——第二篇

    <javascript权威指南>读书笔记——第二篇 金刚 javascript js javascript权威指南 今天是今年的196天,分享今天的读书笔记. 第2章 词法结构 2.1 字 ...

  7. 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分的解决办法方案

    最近操作系统不断地报异常或错误,可能是用得太久了,而刚好工作比较多又不想重新安装系统,但用一段时间后(一天大概有两次)系统就出现各种问题导致无法继续使用真是痛苦万分啊,今天又来了这样的错误: 此实现不 ...

  8. AjaxHelper简介

    在Asp.Net MVC中提供了AjaxHelper类: Ajax.ActionLink 创建一个超链接,点击时,使用Ajax提交数据到一个指定的控制器 Ajax.RouteLink 和ActionL ...

  9. SQL Server 监控统计阻塞脚本信息

        数据库产生阻塞(Blocking)的本质原因 :SQL语句连续持有锁的时间过长 ,数目过多, 粒度过大.阻塞是事务隔离带来的副作用,它是不可避免的,而且是一个数据库系统常见的现象. 但是阻塞的 ...

  10. [20141124]sql server密码过期,通过SSMS修改策略报错

    背景: 新建了用户,没有取消掉强制密码策略 修改掉策略报错 错误: The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF ...