匹克定理

https://en.wikipedia.org/wiki/Pick's_theorem

Pick's Theorem

P2735 [USACO3.4]网 Electric Fences

https://www.luogu.com.cn/problem/P2735

题目描述

在本题中,格点是指横纵坐标皆为整数的点。

为了圈养他的牛,农夫约翰(Farmer John)建造了一个三角形的电网。他从原点(0,0)牵出一根通电的电线,连接格点(n,m)(0<=n<32000,0<m<32000),再连接格点(p,0)(p>0),最后回到原点。

牛可以在不碰到电网的情况下被放到电网内部的每一个格点上(十分瘦的牛)。如果一个格点碰到了电网,牛绝对不可以被放到该格点之上(或许Farmer John会有一些收获)。那么有多少头牛可以被放到农夫约翰的电网中去呢?

输入格式

输入文件只有一行,包含三个用空格隔开的整数:n,m和p。

输出格式

输出文件只有一行,包含一个整数,代表能被指定的电网包含的牛的数目。

样例 #1

样例输入 #1
7 5 10
样例输出 #1
20

提示

题目翻译来自NOCOW。

USACO Training Section 3.4

参考代码

#include <bits/stdc++.h>
using namespace std;
int n, m, p;
int gcd(int x, int y) {
	return y ? gcd(y, x % y) : x;
}
int main() {
	cin >> n >> m >> p;
	cout << (m * p + 2 - p - gcd(n, m) - gcd(abs(n - p), m)) / 2 << endl;
	return 0;
}

题解

叉积

(0, 0)
(x1, y1)
(x2, y2)
三个点组成的三角形面积是
|x1 y2 - x2 y1| / 2

  1. 匹克定理
    1. Pick's Theorem
      1. P2735 [USACO3.4]网 Electric Fences