您的位置:首页 > Web前端

Electric Fence

2016-02-18 15:57 267 查看
描述

在本题中,格点是指横纵坐标皆为整数的点。
为了圈养他的牛,农夫约翰建造了一个三角形的电网。他从原点(0,0)牵出一根通电的电线,连接格点[n,m](0<n,m<32000),再连接格点[p,0](p>0),最后回到原点。
牛可以在不碰到电网的情况下被放到电网内部的每一个格点上(十分苗条的牛)。如果一个格点碰到了电网,牛绝对不可以被放到该格点之上。那么有多少头牛可以被放到农夫约翰的电网中去呢?

输入

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

输出

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

样例输入

7 5 10

样例输出

20

哈哈。很有意思的题。各种方法都可以水。

比如用 平行x轴的直线去切。什么的。

有人用了个叫什么pick定理的似乎很有意思。

PICK定理:

这个公式是皮克(Pick)在1899年给出的,被称为“皮克定理”,这是一个实用而有趣的定理。
给定顶点坐标均是整点(或正方形格点)的简单多边形,皮克定理说明了其面积S和内部格点数目n、边上格点数目s的关系



(其中n表示多边形内部的点数,s表示多边形边界上的点数,S表示多边形的面积)

此题中 可以列出
n + s/2 - 1 = p*y/2
写成n=....
就完了.

代码:

/*
ID: Andy Chen
LANG: C++
TASK: fence9
*/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
using namespace std;
int gcd(int a,int b)
{
return b == 0?a:gcd(b,a%b);
}
int main()
{
int x,y,p;
int a,s,b;
freopen("fence9.in","r",stdin);
freopen("fence9.out","w",stdout);
scanf("%d%d%d",&x,&y,&p);
s = p*y;
b = gcd(x,y)+p;
b += gcd(fabs(p-x),y);
a = (s+2-b)/2;
printf("%d\n",a);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: