Pick定理

来源:互联网 发布:淘宝网渔具店 编辑:程序博客网 时间:2024/05/17 07:14

我的心愿是世界和平!

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

应用:第一行输入测试组数o,接下来每组第一行输入移动步数m,接下来的m行输入两点a,b,分别代表在x,y轴的移动距离。

#include<stdio.h>int gcd(int x,int y){    if(y==0)        return x;    return gcd(y,x%y);}int bianjiedian(int a,int b){    a=a>0?a:-a;    b=b>0?b:-b;    return gcd(a,b);}int mianji(int x,int y,int a,int b){    return x*b-a*y;}int main(){    int i,o,t,m,a,b,x,y,aa,bb,s;    scanf("%d",&o);    t=0;    while(o--)    {        s=0;        bb=0;        x=0;        y=0;        scanf("%d",&m);        for(i=0; i<m; i++)        {            scanf("%d%d",&a,&b);            bb+=bianjiedian(a,b);//计算在边界上的点.            a+=x;            b+=y;            s+=mianji(x,y,a,b);//计算切割成小三角形的面积.            x=a;            y=b;        }        s=s>0?s:-s;        aa=(s+2-bb)/2;//利用Pick定理求在多边形内部的点.        double ss;        ss=1.0*s/2.0;        printf("Scenario #%d:\n%d %d %.1lf\n\n",++t,aa,bb,ss);    }    return 0;}

题目来源 :http://acm.sdibt.edu.cn:8080/vjudge/contest/view.action?cid=1813#problem/I

原创粉丝点击