题目链接
题意
给定一个格点三角形,三个顶点分别为(0,0),(n,m),(p,0),求三角形内部的格点个数。
思路
皮克公式:
[S = frac{i}{2}+b-1
]
(S)为三角形面积,(i)为三角形边界上的格点个数,(b)为三角形内部的格点个数。
(i)可由(gcd)求得。
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
int main() {
int n, m, p;
scanf("%d%d%d", &n, &m, &p);
int i = gcd(n, m) + gcd(abs(p-n), m) + p;
LL b = (1LL * p * m - i) / 2 + 1;
printf("%lld
", b);
return 0;
}