BZOJ3505[数三角形]
来源:互联网 发布:unity3d播放视频卡帧 编辑:程序博客网 时间:2024/05/22 00:38
Description
给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个。下图为4x4的网格上的一个三角形。
注意三角形的三点不能共线。
Input
输入一行,包含两个空格分隔的正整数m和n。
Output
输出一个正整数,为所求三角形数量。
Sample Input
2 2
Sample Output
76
数据范围
1<=m,n<=1000
题解:先算出所有点的组合数,再减去再同一直线的组合数,值得一提的是,在同一斜线上的组合数有点复杂。
以(x1, y1) ( x2, y2 )为两端点的线段上有
gcd( y2-y1, x2-x1)-1
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;#define LL long longLL ans, M, N, tot;LL C( int m, int n ){ LL ret = 1; for ( int i = m-n+1; i <= m; i++) ret *= i; for ( int i = 1; i <= n; i++ ) ret /=i; return ret; }LL gcd( LL a, LL b ){ return b==0 ? a : gcd( b, a%b );}int main(){ cin >> M >> N, M++, N++; if ( M > N ) swap( M, N ); tot = M*N; ans = 0; ans += C( tot, 3 ); ans -= M *C( N, 3 ); ans -= N *C( M, 3 ); for(LL i=1;i<=N;i++){ for(LL j=1;j<=M;j++){ if(i!=1||j!=1){ if(i==1||j==1) ans-=(gcd(i,j)-1)*(N-i)*(M-j); else ans-=2*(gcd(i,j)-1)*(N-i)*(M-j); } } } cout << ans;}
阅读全文
0 0
- [Bzoj3505][Cqoi2014]数三角形
- bzoj3505 [Cqoi2014]数三角形
- bzoj3505: [Cqoi2014]数三角形
- bzoj3505 [Cqoi2014]数三角形
- 【CQOI2014】【BZOJ3505】数三角形
- bzoj3505【CQOI2014】数三角形
- bzoj3505: [Cqoi2014]数三角形
- 【bzoj3505】[Cqoi2014]数三角形
- BZOJ3505[数三角形]
- bzoj3505 [Cqoi2014]数三角形
- bzoj3505 [Cqoi2014]数三角形
- BZOJ3505 [Cqoi2014]数三角形
- 【bzoj3505】 CQOI2014数三角形 数学
- BZOJ3505 数三角形 题解 【数论】
- bzoj3505 [Cqoi2014]数三角形 题解
- 【BZOJ3505】【数论】数三角形 题解
- BZOJ3505 [Cqoi2014]数三角形 数学
- 【bzoj3505】【CQOI2014】【数三角形】【组合数学】
- 二叉树(4)
- Linux下打包语句
- 单例的几种实现方式
- activeMQ(1)
- 从Python对象三要素来看is和==的区别
- BZOJ3505[数三角形]
- 别再被软文忽悠了,简单一招儿可以让固态盘现出真实性能之原形
- IMP到底是什么?
- 深度学习(10)文本降维
- 确定PWM频率
- export 到处模块从另一模块中出错
- ViewCompat.animate的使用
- Yaf 学习记录(1)
- 关于JS中如何获取动态加载的对象小结