计算几何-皮克定理

皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为2S=2a+b-2,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积。



------USACO Section 3.4 电网 Electric Fences------------

题目描述

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

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

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

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






#include <iostream>
using namespace std;
//pick:2S=2a+b-2 
//a = 2S-b+2

inline int abs(int x) {
    return x > 0 ? x : -x;
}

int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}

int n, m, p;

int main() {
    int a, b, s;
    cin >> n >> m >> p; 
    s = p * m;
    b = gcd(n, m) + gcd(m, abs(n-p)) + p;
    a = s - b + 2;
    cout << a / 2 << endl;
    return 0;
}




猜你喜欢

转载自blog.csdn.net/Binary_Heap/article/details/79301232