【CQOI2014】数三角形
2017-03-24 20:43
239 查看
Description
给定一个n×m的网格,计算三点都在网格上的三角形共有多少个。Solution
正难则反,三角形个数等于C3(n+1)(m+1)减去三点共线的个数。那么枚举一个矩形的长和宽,计算对角线三点共线的数量,然后乘以矩形的个数即可。横线上和竖线上可以直接统计。
Code
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #define fo(i,j,k) for(int i=j;i<=k;i++) #define N 1010 #define ll long long using namespace std; int a ; ll b ; ll calc(int x){ return (ll)x*(x-1)*(x-2)/6; } int gcd(int x,int y) { int z; while(x%y!=0) { z=x%y; x=y; y=z; } return y; } int main() { int n,m; scanf("%d %d",&n,&m); n++,m++; ll t=n*1ll*m,ans=calc(t); fo(i,1,n-1) fo(j,1,m-1) ans-=(ll)(n-i)*(m-j)*(gcd(i,j)-1)*2; ans-=(ll)n*calc(m)+(ll)m*calc(n); printf("%lld",ans); }
相关文章推荐
- BZOJ 3505 [Cqoi2014]数三角形
- 洛谷P3166 [CQOI2014]数三角形
- 【BZOJ3505】[Cqoi2014]数三角形 组合数
- 3505: [Cqoi2014]数三角形
- 【bzoj3505】[Cqoi2014]数三角形 容斥原理
- BZOJ 3505 CQOI 2014 数三角形 数学
- [CQOI2014】数三角形
- BZOJ 3505: [Cqoi2014]数三角形|组合数学
- 【BZOJ 3505】 [Cqoi2014]数三角形
- bzoj 3505: [Cqoi2014]数三角形 组合数学
- bzoj 3505: [Cqoi2014]数三角形 排列组合+数学
- BZOJ 3505 【CQOI2014】 数三角形
- 3505: [Cqoi2014]数三角形
- gcd小规律 [Cqoi2014]数三角形
- BZOJ 3505: [Cqoi2014]数三角形 [组合计数]
- 【CQOI2014】数三角形
- 【bzoj3505】[Cqoi2014]数三角形
- bzoj3505: [Cqoi2014]数三角形
- bzoj 3505 [Cqoi2014]数三角形 组合
- bzoj3505[CQOI2014]数三角形