zoukankan      html  css  js  c++  java
  • Area POJ

    Area

     POJ - 1265 

    皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为2S=2a+b-2,

    其中a表示多边形内部的点数,b表示多边形边界上的点数,S表示多边形的面积。

    适用范围:必须是格点多边形。S = A / 2 + B - 1

    #include<stdio.h>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define maxn 1234
    struct node
    {
        int x,y;
    } a[maxn];
    int s1[maxn],s2[maxn];
    double area;
    int t,m,A,B;
    int main()
    {
        scanf("%d",&t);
        for(int i=1; i<=t; i++)
        {
            a[0].x=a[0].y=0;
            area=A=0;
            memset(s1,0,sizeof(s1));
            memset(s2,0,sizeof(s2));
            scanf("%d",&m);
            for(int j=1; j<=m; j++)
            {
                scanf("%d%d",&a[j].x,&a[j].y);
                if(a[j].x==0)A+=abs(a[j].y);
                else if(a[j].y==0)A+=abs(a[j].x);
                else A+=__gcd(abs(a[j].x),abs(a[j].y));
                a[j].x+=a[j-1].x;
                a[j].y+=a[j-1].y;
            }
            a[m+1]=a[1];
            for(int j=1; j<=m; j++)
            {
                s1[j]+=s1[j-1]+a[j].x*a[j+1].y;
                s2[j]+=s2[j-1]+a[j].y*a[j+1].x;
            }
            area=abs(s1[m]-s2[m]);
            B=(area+2-A)/2;
            area=double(area)/2.0;
            printf("Scenario #%d:
    %d %d %.1f
    
    ",i,B,A,area);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Linux安装.net core
    在IIS中如何配置SSL(https)
    Lambda的前世今生
    Java建造者模式
    leetcode 83 Remove Duplicates from Sorted List
    【设计】Office
    【设计】简书品牌重构
    【设计总结】
    【交互设计】
    【设计总结】
  • 原文地址:https://www.cnblogs.com/SDUTNING/p/10263678.html
Copyright © 2011-2022 走看看