POJ 1265 pick公式

简介:

这题用到了pick公式,area=on/2+in-1 on为在多边形边上的点数,in为在多边形内的点数。叉积求多边形面积,gcd(x,y)为边上的点数,x为相邻两点x差的绝对值,y同理。根据公式可求在多边形内的点数。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int gcd(int a,int b)
{
    if(b==0)
        return a;
    return gcd(b,a%b);
}
int ab(int a)
{
    return a>=0?a:-a;
}
int main()
{
    int n,t,s=0;
    scanf("%d",&t);
    while(t--)
    {
        if(s)
            printf("\n");
        scanf("%d",&n);
        int ep=0,area=0,in,x,y,x1=0,y1=0,x2=0,y2=0;
        for(int i=0; i<n; i++)
        {
            scanf("%d%d",&x,&y);
            x1+=x,y1+=y;
            area+=x1*y2-y1*x2;
            x2=x1,y2=y1;
            ep+=gcd(ab(x),ab(y));
        }
        area=ab(area);
        in=area/2-ep/2+1;
        printf("Scenario #%d:\n%d %d %.1f\n",++s,in,ep,area/2.0);
    }
    return 0;
}


目录
相关文章
|
机器学习/深度学习
HDU2376——Average distance(思维+树形DP)
HDU2376——Average distance(思维+树形DP)
69 0
|
C语言
HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)
HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)
79 0
|
机器学习/深度学习
HDOJ(HDU) 2524 矩形A + B(推导公式、)
HDOJ(HDU) 2524 矩形A + B(推导公式、)
76 0
HDOJ(HDU) 2524 矩形A + B(推导公式、)
HDOJ/HDU 2566 统计硬币(公式~遍历~)
HDOJ/HDU 2566 统计硬币(公式~遍历~)
115 0
HDOJ(HDU) 2138 How many prime numbers(素数-快速筛选没用上、)
HDOJ(HDU) 2138 How many prime numbers(素数-快速筛选没用上、)
81 0
HDOJ 2076 夹角有多大(题目已修改,注意读题)
HDOJ 2076 夹角有多大(题目已修改,注意读题)
78 0
|
机器学习/深度学习
HDOJ(HDU) 2083 简易版之最短距离(中位数)
HDOJ(HDU) 2083 简易版之最短距离(中位数)
117 0

热门文章

最新文章