POJ1265:Area(多边形面积公式+pick公式) 好题

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

题意:

题目解析:

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <queue>
#define inf 0x3f3f3f3f
#define eps 1e-9
typedef long long ll;
using namespace std;
struct point
{
    int x,y;
} q[1010];
int n;
ll num,In;
double S;
int gcd(int A,int B)
{
    return B==0?A:gcd(B,A%B);
}
int Mult(point A,point B)
{
    return A.x*B.y-B.x*A.y;
}
int main()
{
    int T,xx,yy,sx,sy,dx,dy,K=0;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        sx=sy=0;
        S=0;
        num=0;
        for(int i=1; i<=n; i++)
        {
            scanf("%d%d",&xx,&yy);
            sx+=xx;
            sy+=yy;
            q[i].x=sx;
            q[i].y=sy;
        }
        q[0].x=q[n].x;
        q[0].y=q[n].y;
        for(int i=0; i<n; i++)
        {
            S+=Mult(q[i],q[i+1]);
            dx=abs(q[i].x-q[i+1].x);
            dy=abs(q[i].y-q[i+1].y);
            num+=gcd(max(dx,dy),min(dx,dy));
        }
        S=fabs(S/2);//不确定S是否为正数
        In=int(S)+1-num/2;
        printf("Scenario #%d:\n",++K);
        printf("%I64d %I64d %.1f\n\n",In,num,S);
    }
    return 0;
}
时间: 2024-11-05 06:12:09

POJ1265:Area(多边形面积公式+pick公式) 好题的相关文章

POJ 1654 Area [多边形面积]

Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19642   Accepted: 5376 Description You are going to compute the area of a special kind of polygon. One vertex of the polygon is the origin of the orthogonal coordinate system. From thi

POJ 1654 Area 多边形面积 G++会WA

#include<stdio.h> #include<algorithm> #include <cstring> using namespace std; typedef long long ll; const int MAXN = 1000008; char s[MAXN]; int dx[] = {-1, -1, -1, 0, 0, 0, 1, 1, 1}; int dy[] = {-1, 0, 1, -1, 0, 1, -1, 0, 1}; int main()

多边形面积

多边形面积 多边形通常分为凸多边形和凹多边形 计算多边形面积有几种好用的算法 其核心思想都是把一个n(n>=3)边形转化为n-2个三角形,然后计算 一:海伦公式 最常见的多边形面积计算公式 此公式表达式为: S= sqrt( p*(p-a)*(p-b)*(p-c)) 其中p为此三角形的半周长,而a,b,c为三角形三边长 若三角形三点为x1,y1,x2,y2,x3,y3, 即p=(a+b+c)/2 a=sqrt((x2-x1)2+(y2-y1)2) b=sqrt((x3-x2)2+(y3-y2)2

POJ1265——Area(Pick定理+多边形面积)

Area DescriptionBeing well known for its highly innovative products, Merck would definitely be a good target for industrial espionage. To protect its brand-new research and development facility the company has installed the latest system of surveilla

POJ 1265 Area Pick公式

题目大意:给出一个多边形的轮廓(以边的向量形式给出),求:1.有多少个整点在这个图形里面,2.有多少个点在图形内部,3.图形的面积是多少. 思路:首先明确Pick公式: 公式意义并不是让我们求出这个多边形的面积是多大,一是因为面积没必要用Pick公式求,二是没法求出多边形中间有多少整点.但是面积可以用叉积来求,多边形边上的整点可以用gcd来求,这样经过稍微的变形,就可以求解多边形中间有多少个整点了. CODE(c++AC,g++WA,求高人指点): #include <cstdio> #inc

Area - POJ 1265(pick定理求格点数+求多边形面积)

题目大意:以原点为起点然后每次增加一个x,y的值,求出来最后在多边形边上的点有多少个,内部的点有多少个,多边形的面积是多少. 分析: 1.以格子点为顶点的线段,覆盖的点的个数为GCD(dx,dy),其中,dxdy分别为线段横向占的点数和纵向占的点数.如果dx或dy为0,则覆盖的点数为dy或dx.2.Pick公式:平面上以格子点为顶点的简单多边形的面积=边上的点数/2+内部的点数+1.3.任意一个多边形的面积等于按顺序求相邻两个点与原点组成的向量的叉积之和. 代码如下: -------------

多边形面积公式

多边形面积公式 设点顺序 (x1 y1) (x2 y2)    ... (xn yn) 则面积等于 |x1   y1 |      |x2   y2|                  |xn   yn| 0.5 * abs( |            | +   |           | + ...... +   |           | ) |x2   y2 |      |x3   y3|                  |x1   y1| 其中        |x1   y1| |

poj 1654 Area(求多边形面积)

题意:从原点出发向八个方向走,所给数字串每个数字代表一个方向,终点与原点连线,求所得多边形面积: 思路:(性质)共起点的两向量叉积的一半为两向量围成三角形的面积.以此计算每条边首尾两个向量的叉积,求和,除二: #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const dou

Area - POJ 1654(求多边形面积)

题目大意:从原点开始,1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走.求出最后的多边形面积. 分析:这个多边形面积很明显是不规则的,可以使用向量积直接求出来面积即可. 代码如下: ------------------------------------------------------------------------------------------------------------------------------