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. IDEA 2018 最新激活码 License server

    IDEA 2018 最新激活码 License server 总会有一个属于适合你的!嘻嘻 http://hb5.s.osidea.cc:1017 http://idea.youbbs.org htt ...

  2. QT中的小细节

    一 .  QT4和QT5的区别(信号和槽):1.  QT4: connect(button,SIGNAL(pressed()),this,SLOT(close())); /** * 优点 :写法简单 ...

  3. JSBridge实现示例

    前言 参考来源 前人栽树,后台乘凉,本文参考了以下来源 Hybrid APP架构设计思路 marcuswestin/WebViewJavascriptBridge 楔子 本文介绍JSBridge的完整 ...

  4. python下graphviz安装

    参考链接:https://blog.csdn.net/u013250416/article/details/72790754 1.安装Graphviz 在graphviz的官网(网址:http://w ...

  5. (第十一周)约跑APP测试报告

    项目名称:约跑App 用户需求规格说明书URL:http://www.cnblogs.com/liquan/p/6071804.html 组长博客URL:http://www.cnblogs.com/ ...

  6. VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库

    1.问题描述 原开发环境:Win7 64位旗舰版,VS2010,ThinkPad T460 出现问题:自己开发的MFC程序在WinXP环境下无法正常运行,弹框“无法定位程序输入点InitializeC ...

  7. 文献:Technology-related Disasters:A Survey toward Disaster-resilient Software Defined Networks

    DISASTER的定义和影响(本文中) 定义范围: 自然灾害,比如洪水.地震等造成一定范围类的节点故障: 恶意攻击,DDOS攻击或者电磁脉冲攻击造成节点故障: 技术相关的问题,配置错误或者误操作等: ...

  8. Leetcode题库——31.下一个排列

    @author: ZZQ @software: PyCharm @file: nextPermutation.py @time: 2018/11/12 15:32 要求: 实现获取下一个排列的函数,算 ...

  9. lintcode-514-栅栏染色

    514-栅栏染色 我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染. 必须保证不存在超过2个相邻的柱子颜色相同,求有多少种染色方案. 注意事项 n和k都是非负整数 样例 n = 3, ...

  10. Gradle入门(1):安装

    在Ubuntu下,执行以下命令: sudo apt-get install gradle 安装完成后,执行命令: gradle -v 得到以下信息: Picked up _JAVA_OPTIONS:  ...