bzoj 3505
3505: [Cqoi2014]数三角形
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 698 Solved: 424
[Submit][Status][Discuss]
Description
给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个。下图为4x4的网格上的一个三角形。
注意三角形的三点不能共线。
Input
输入一行,包含两个空格分隔的正整数m和n。
Output
输出一个正整数,为所求三角形数量。
Sample Input
2 2
Sample Output
76
数据范围
1<=m,n<=1000
数据范围
1<=m,n<=1000
HINT
ans=任取三个点的方案−三点在同一条直线的方案
任取三点的方案=((n+1)∗(m+1)3)
三点在同一条直线的方案=水平的+竖直的+斜着的=(n+1)∗(m+13)+(m+1)∗(n+13)+斜着的
斜着的怎么算呢?
算出“\”的,“/”用“\”乘2即可。
我们枚举i,j表示这条斜着的线的端点分别是i∗j的矩形的左上角和右下角,这条斜线两点已经确定,这条斜线与格点的交点个数为:gcd(i,j)−1
(把斜线当做直角三角形的斜边就明白为什么是gcd(i,j)−1了)
而这条斜线还可以平移,一共有(n+1−i)∗(m+1−j)条,最后这样的斜线一共有
(gcd(i,j)−1)∗(n+1−i)∗(m+1−j)
条,就可以算了。