3505: [Cqoi2014]数三角形

Description

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

Input

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

Output

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

Sample Input

2 2

Sample Output

76

HINT

数据范围
1<=m,n<=1000


  这肯定是很典型的排列组合水题。先n++,m++,再C(n*m,3),最后减去三点共线的特例。

  横的,竖的,很好算,C(n,3)*m+C(m,3)。但是斜的,需要想一想。

  在(a,b) (x,y)两点构成的线段上有gcd(a-x,b-y)-1个整点(a>x,b>y),这显然成立。斜的即有两点,△x与△y均大于0,在他们之间有gcd(△x,△y)-1个整点,而这种情况有2*(n-△x)*(m-△y)种。以O(n^2)的效率减去就是了。

 /**************************************************************
Problem: 3505
User: Doggu
Language: C++
Result: Accepted
Time:660 ms
Memory:820 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
long long n, m, x, ans;
inline long long gcd(long long a,long long b) {return b==?a:gcd(b,a%b);}
inline long long C(long long p) {return p*(p-)*(p-)/;}
int main() {
scanf("%lld%lld",&n,&m);n++;m++;x=std::min(n,m);
ans=C(n*m)-C(n)*m-C(m)*n;
for( int i = ; i < n; i++ ) for( int j = ; j < m; j++ ) ans-=(gcd(i,j)-)**(n-i)*(m-j);
printf("%lld\n",ans);
return ;
}

math(820kb 660ms)

  但是,居然发现,若把gcd记忆化,效率将大大提高。

 /**************************************************************
Problem: 3505
User: Doggu
Language: C++
Result: Accepted
Time:292 ms
Memory:8792 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
long long n, m, x, ans, g[][];
inline long long gcd(long long a,long long b) {if(g[a][b]) return g[a][b];return g[a][b]=b==?a:gcd(b,a%b);}
inline long long C(long long p) {return p*(p-)*(p-)/;}
int main() {
scanf("%lld%lld",&n,&m);n++;m++;x=std::min(n,m);
ans=C(n*m)-C(n)*m-C(m)*n;
for( int i = ; i < n; i++ ) for( int j = ; j < m; j++ ) ans-=(gcd(i,j)-)**(n-i)*(m-j);
printf("%lld\n",ans);
return ;
}

math++(8792kb 292ms)

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]数三角形(组合计数)

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

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

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

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

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

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

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

随机推荐

  1. MCS锁——可伸缩的自旋锁

    在编写并发同步程序的时候,如果临界区非常小,比如说只有几条或几十条指令,那么我们可以选择自旋锁(spinlock).使用普通的互斥锁会涉及到操作系统的调度,因此小临界区一般首选自旋锁.自旋锁的工作方式 ...

  2. 教你用Python解决非平衡数据问题(附代码)

    本文为你分享数据挖掘中常见的非平衡数据的处理,内容涉及到非平衡数据的解决方案和原理,以及如何使用Python这个强大的工具实现平衡的转换. 后台回复“不平衡”获取数据及代码~ 前言 好久没有更新自己写 ...

  3. Ipython使用

    目录 Ipython说明 Ipython使用 安装使用 TAB键自动补全 内省(?命令) 执行系统命令(!) 与操作系统交互 %run命令执行文件代码 %paste %cpaste命令执行剪贴板代码 ...

  4. xml配置文件特殊符号的处理方法

    2017.7.19遇到问题:偶然出现“认证失败,请重新登录”的现象   在xml中英文问号“?”是可以被正常解析的,但是以下这几种符号是不能正常解析的:分别是“&”.“<”.“>” ...

  5. 苏宁笔试:UML类图中的关系

    1. 依赖 2. 关联 3. 聚合 4. 组合 5. 泛化 6. 实现

  6. 第35次Scrum会议(11/23)【欢迎来怼】

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文小组照片 二.开会信息 时间:2017/11/23 17:03~17:24,总计21min.地点:东北师 ...

  7. Mac 下搭建 Apache 服务器

    Apache作为最流行的Web服务器端软件之一,它的优点与地位不言而喻.下面介绍下在Mac下搭建Apache服务器的步骤: (1)“前往” –>”个人” (2)在你的个人目录下新建一个文件夹,改 ...

  8. 个人作业-week2(代码复审)

    一.代码复审check list 概要部分 代码符合需求和规格说明吗? 符合要求和规格说明,-s指令和-c指令都能实现需求.并且能够处理非法输入. 代码设计是否有周全的考虑? 程序的main函数中对各 ...

  9. SQL Server 中几个有用的特殊函数

    在SQL Server 的使用过程中,发现几个很有用,但不太常用(或细节不太清楚)的函数(存储过程): isnumeric,isdate,patindex,newid,collate,sp_execu ...

  10. [转帖] go的import 语法

    package 的导入语法写 Go 代码的时经常用到 import 这个命令用来导入包,参考如下: import( "fmt" ) 然后在代码里面可以通过如下的方式调用: fmt. ...