Pick定理

我的心愿是世界和平!

公式: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值