您的位置:首页 > Web前端

Electric Fences_usaco3.4_皮克定理

2016-10-16 21:04 381 查看

Description

给定两个整点(m,n)和(p,0),与坐标原点(0,0)构成三角形,求三角形内的整点数量

Analysis

找到这么一道神奇的题目以及神奇的定理

皮克定理

一个计算点阵中顶点在格点上的多边形面积公式:S=a+b2−1,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积

S=ah2,b=p+gcd(n,m)+gcd(|p−n|,m),那么a=S−b2+1

Code

/*
ID:wjp13241
PROG:fence9
LANG:C++
*/
#include <stdio.h>
#include <cmath>
using namespace std;
struct pos{int x,y;}t[3];
double cros(pos a,pos b,pos c)
{
return ((a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y))*0.5;
}
int gcd(int x,int y)
{
return !y?x:gcd(y,x%y);
}
int main()
{
scanf("%d%d%d",&t[1].x,&t[1].y,&t[2].x);
double S=fabs(cros(t[1],t[2],t[0]));
int b=t[2].x+gcd(t[1].x,t[1].y)+gcd(fabs(t[2].x-t[1].x),t[1].y);
printf("%d\n",(int)(S-b/2+1));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: