zoukankan      html  css  js  c++  java
  • Area

    题目大意:以原点为起点然后每次增加一个x,y的值,求出来最后在多边形边上的点有多少个,内部的点有多少个,多边形的面积是多少。

    分析:

    1、以格子点为顶点的线段,覆盖的点的个数为GCD(dx,dy),其中,dxdy分别为线段横向占的点数和纵向占的点数。如果dx或dy为0,则覆盖的点数为dy或dx。
    2、Pick公式:平面上以格子点为顶点的简单多边形的面积=边上的点数/2+内部的点数+1。
    3、任意一个多边形的面积等于按顺序求相邻两个点与原点组成的向量的叉积之和。

    代码如下:

    -------------------------------------------------------------------------------------------------------------

    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    
    const int MAXN = 1e4+7;
    const double EPS = 1e-10;
    
    int GCD(int m, int n)
    {
        if(!m || !n)
            return m+n;
        return GCD(n, m%n);
    }
    
    int main()
    {
        int T, t=1;
    
        scanf("%d", &T);
    
        while(T--)
        {
            int N, x, y, nx=0, ny=0, cnt=0, area=0;
    
            scanf("%d", &N);
    
            for(int i=0; i<N; i++)
            {
                scanf("%d%d", &x, &y);
    
                cnt += GCD(abs(x), abs(y));
                x += nx, y += ny;
                area += (x*ny - y*nx);
                nx = x, ny = y;
            }
            if(area < 0)area = -area;
            printf("Scenario #%d:
    ", t++);
            printf("%d %d %.1f
    
    ", (area-cnt)/2+1, cnt, area/2.0);
        }
    
        return 0;
    }
  • 相关阅读:
    Django
    闭包&装饰器
    Python学习 Day 062
    Python学习 Day 059
    Python学习 Day 058
    Python生成器
    第一类对象(函数),闭包及迭代器
    进阶函数的学习
    对函数的初步了解
    python文件操作
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4914467.html
Copyright © 2011-2022 走看看