poj 1265 Area

来源:互联网 发布:黄金软件哪个好 编辑:程序博客网 时间:2024/05/21 17:28

现在发现自己在数学就是一个战五渣,知道公式直接就出来了

简要说明:对于格点多边形(即在一个网格中,所有的顶点均在格点上的多边形),其面积公式 A = b / 2 + i - 1;

                其中b为在边上的格点数,i为在多边形内部的格点数

格点多边形边上的格点数b的求法:每条边上的格点数相加

假设给定边e,两端点为p1(x1,y1),(x2,y2);则边e上的格点数为GCD(x2-x1,y2-y1),注意:此处求出的格点数只包含一个端点。GCD为最大公约数

 poj1265:给定一个格点多边形,求出内部点数i,边上点数b,和面积a

面积用叉积求,b用上述方法求,i由公式得

#include <iostream>#include <cstdio>#include <math.h>#include <algorithm>#include<iomanip>using namespace std; int GCD(int a, int b) {    while (b) {        int r = b;        b = a % b;        a = r;    }    return a;}int main(){     int t, cas, n, i, x1, y1, x2, y2, dx, dy, on, in, area;    scanf ("%d", &cas);    for (t = 1; t <= cas; t++) {        scanf("%d",&n);        x1=x2=y1=y2=on=area=0;        for(i=1;i<=n;i++)        {scanf("%d%d",&dx,&dy);        x2=x1+dx;         y2 = y1 + dy;         on += GCD(abs(dx), abs(dy));         area+=x1*y2-x2*y1;         x1=x2;         y1=y2;        }        in=(area+2-on)/2;        printf ("Scenario #%d:\n%d %d %.1lf\n\n", t, in, on, area/2.0);    }    return 0;}


0 0