BZOJ 3505 [Cqoi2014]数三角形
3505: [Cqoi2014]数三角形
Description
给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个。下图为4x4的网格上的一个三角形。注意三角形的三点不能共线。
Input
输入一行,包含两个空格分隔的正整数m和n。
Output
输出一个正整数,为所求三角形数量。
Sample Input
Sample Output
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]数三角形的更多相关文章
- BZOJ 3505: [Cqoi2014]数三角形 数学
3505: [Cqoi2014]数三角形 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- Bzoj 3505: [Cqoi2014]数三角形 数论
3505: [Cqoi2014]数三角形 Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits Description
- bzoj 3505: [Cqoi2014]数三角形 组合数学
3505: [Cqoi2014]数三角形 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 478 Solved: 293[Submit][Status ...
- BZOJ 3505: [Cqoi2014]数三角形( 组合数 )
先n++, m++ 显然答案就是C(3, n*m) - m*C(3, n) - n*C(3, m) - cnt. 表示在全部点中选出3个的方案减去不合法的, 同一行/列的不合法方案很好求, 对角线的不 ...
- BZOJ 3505: [Cqoi2014]数三角形 [组合计数]
3505: [Cqoi2014]数三角形 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注意三角形的三点不能共线. 1<=m,n<=1000 $n++ m++$ $ans ...
- bzoj 3505 [Cqoi2014]数三角形(组合计数)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题意] 在n个格子中任选3点构成三角形的方案数. [思路] 任选3点-3点共线 ...
- BZOJ 3505 [Cqoi2014]数三角形(组合数学)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题目大意] 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注 ...
- bzoj 3505 [Cqoi2014]数三角形——排列组合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3505 好题!一定要经常回顾! 那个 一条斜线上的点的个数是其两端点横坐标之差和纵坐标之差的g ...
- bzoj 3505 [Cqoi2014]数三角形 组合
ans=所有的三点排列-共行的-共列的-斜着一条线的 斜着的枚举每个点和原点的gcd,反过来也可以,还能左右,上下挪 #include<cstdio> #include<cstrin ...
随机推荐
- systemctl status ssh.service 服务重启出现报错
Case: ubuntu在从Ubuntu 16.04 LTS 升级到18.04 的时候,执行 do-release-upgrade -d 后,发现ssh无法登陆服务器, Solution: 1.通过s ...
- python-五行红旗实现
import turtle """ 绘制五星红旗 作者:zxj 版本:1.0 """ # 绘制矩形函数 def giant(leg,hig) ...
- 【NLP】彻底搞懂BERT
# 好久没更新博客了,有时候随手在本上写写,或者Evernote上记记,零零散散的笔记带来零零散散的记忆o(╥﹏╥)o..还是整理到博客上比较有整体性,也方便查阅~ 自google在2018年10月底 ...
- spring-boot+swagger实现WebApi文档
1.引用依赖包 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-s ...
- printf命令详解
基础命令学习目录首页 本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中 ...
- OO学习体会与阶段总结(设计与实现)
前言 在最近的一个月的课程中,笔者对于规格化编程进行了深入的学习.运用面向对象抽象思想对编写的程序进行过程抽象.异常处理.数据抽象.类的层次规格与迭代等等规格设计,使得程序结构化程度提高,具有更好 ...
- 第二阶段Sprint冲刺会议9
进展:查看有关“共享平台”的资料,看如何实现上传下载功能,并尝试编码,没有成功.
- Team饭来了团队作业3需求改进与系统设计
团队名称:饭来了 人员组成: 队长:侯晓东 学号:2016012087 队员:崔啸寒 学号:2016012006 队员:方柱权 学号:201601 ...
- 团队作业7——第二次项目冲刺(Beta版本12.09——12.10)
1.当天站立式会议照片 本次会议在5号公寓3楼召开,本次会议内容:①:熟悉每个人想做的模块.②:根据项目要求还没做的完成. 2.每个人的工作 经过会议讨论后确定了每个人的分工 组员 任务 陈福鹏 倒计 ...
- EditorUtility类的说明
SetDirty这个函数告诉引擎,相关对象所属的Prefab已经发生更改. IsPersistent用于判定对象是否是被保存在硬盘中 DisplayDialog显示一个对话框,有OK,Cancel按钮 ...