zoukankan      html  css  js  c++  java
  • Area---poj1265(皮克定理+多边形求面积)

    题目链接:http://poj.org/problem?id=1265

    题意是:有一个机器人在矩形网格中行走,起始点是(0,0),每次移动(dx,dy)的偏移量,已知,机器人走的图形是一个多边形,求这个机器人在网格中所走的面积,还有就是分别求多边形上和多边形内部有多少个网格点;

    皮克定理:

      在一个多边形中。用I表示多边形内部的点数,E来表示多边形边上的点数,S表示多边形的面积。

      满足:S:=I+E/2-1;

    求E,一条边(x1,y1,x2,y2)上的点数(包括两个顶点)=gcd(abs(x1-x2),abs(y1-y2));

    求S用差积

     类似的题还有poj2954

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<string>
    #include<vector>
    #include<algorithm>
    #include<map>
    #include<queue>
    
    using namespace std;
    
    #define met(a, b) memset(a, b, sizeof(a))
    #define N 111
    
    typedef long long LL;
    
    int gcd(int a, int b)
    {
        return b==0?a:gcd(b, a%b);
    }
    
    int main()
    {
        int T, t = 1, n;
        scanf("%d", &T);
        while(T--)
        {
            scanf("%d", &n);
    
            int prex = 0, prey = 0, x, y, S = 0, E = 0;
    
            for(int i=1; i<=n; i++)
            {
                scanf("%d %d", &x, &y);///x和y是偏移量;
    
                E += gcd(abs(x), abs(y));///求边上的格点数;
    
                x += prex;
                y += prey;///求现在的点坐标;
    
                S += x*prey-y*prex;///做差积;
    
                prex = x;
                prey = y;///更新前一个点;
            }
            printf("Scenario #%d:
    ", t++);
            printf("%d %d %.1f
    
    ", (abs(S)-E)/2 + 1, E, abs(S)/2.0);///利用S=I+E/2-1;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    css3 省略号
    js一些常用方法
    nth-child使用
    常见表单元素处理
    表单的基本使用
    web基本概念
    PHP数组
    PHP函数
    PHP错误处理
    PHP文件载入
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5725026.html
Copyright © 2011-2022 走看看