Electric Fences_usaco3.4_皮克定理

来源:互联网 发布:程序员为什么转行? 编辑:程序博客网 时间:2024/04/29 08:08

Description


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

Analysis


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

皮克定理

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

S=ah2b=p+gcd(n,m)+gcd(|pn|,m),那么a=Sb2+1

Code


/*ID:wjp13241PROG:fence9LANG: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;}
0 0
原创粉丝点击