uva10088格点多边形

题目链接:

用皮克定理:

一个计算点阵中顶点在格点上的多边形面积公式:S=a+b/2-1

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

 1 #include<cstdio>
 2 #include<cmath>
 3 #define ll long long
 4 using namespace std;
 5 struct point
 6 {
 7     double x,y;
 8 }p[1010];
 9 int gcd(int a, int b)
10 {
11     return b==0?a:gcd(b,a%b);
12 }
13
14 double cross(point a,point b)
15 {
16     return a.x*b.y-a.y*b.x;
17 }
18
19
20 int main()
21 {
22     int n;
23     double ans=0,tmp=0;
24     while(scanf("%d",&n)&&n){
25             ans=0;
26             tmp=0;
27     for(int i=0;i<n;i++)
28         scanf("%lf%lf",&p[i].x,&p[i].y);
29
30     for(int i=0;i<n;i++)
31     {
32         ans+=cross(p[i],p[(i+1)%n])/2.0;
33         tmp+=gcd(abs(p[i].x-p[(i+1)%n].x),abs(p[i].y-p[(i+1)%n].y) );  //边界上的点
34     }
35     ans=fabs(ans);
36     long long t= ans-tmp/2.0+1;   //要用long long
37     printf("%lld\n",t);
38     }
39 }
时间: 2024-12-14 09:56:01

uva10088格点多边形的相关文章

poj1265&amp;&amp;2954 [皮克定理 格点多边形]【学习笔记】

Q:皮克定理这种一句话的东西为什么还要写学习笔记啊? A:多好玩啊... PS:除了蓝色字体之外都是废话啊...  Part I 1.顶点全在格点上的多边形叫做格点多边形(坐标全是整数) 2.维基百科 Given a simple polygon constructed on a grid of equal-distanced points (i.e., points with integer coordinates) such that all the polygon's vertices a

POJ 1265-Area(计算几何+皮克定理+多边形面积公式)

题目地址:POJ 1265 题意:给定一个格点多边形,求出内部点数in,边上点数on,和面积S. 思路:运用的定理很多. 1.皮克定理:S=in+on/2-1,即in=(2*S+2-on)/2. 2.多边形的面积公式:按顺序求相邻两个点与原点组成的向量的叉积之和. 3.求边上的格点数:以格子点为顶点的线段,覆盖的点的个数为GCD(dx,dy),其中,dxdy分别为线段横向占的点数和纵向占的点数.如果dx或dy为0,则覆盖的点数为dy或dx. #include <stdio.h> #includ

【推导】【找规律】【二分】hdu6154 CaoHaha&#39;s staff

题意:网格图.给你一个格点多边形的面积,问你最少用多少条边(可以是单位线段或单位对角线),围出这么大的图形. 如果我们得到了用n条边围出的图形的最大面积f(n),那么二分一下就是答案. n为偶数时,显然要尽量用斜边去拼矩形,于是f(i)=i*i/4-1 (i mod 4 == 2),f(i)=i*i/4-1(i mod 4 == 0). 当n为奇数时,尽量用i-1情况下的最长边向外扩张一个单位,于是f(i)=f(i-1)+[(i+1)/4]*2-1(i mod 2 == 1),方括号表示下取整.

【POJ 2954】 Triangle

[POJ 2954] Triangle 很涨姿势的一道题 涉及三点 1.三角形算法 已知三点 S = (AB X BC)/2 (PS:海伦公式<已知三边> S = sqrt(p(p-a)(p-b)(p-c) p = (a+b+c)/2) 2.已知两点求两点间格点 即为求两点横纵坐标差的最大公倍数(-1-–不包含顶点) (gcd( abs(x2-x1),abs(y2-y1) ) (-1)) 3.格点多边形的面积 s = d/2+t-1(d->多边形边界的格点数 t->多边形内部格点数

Codeforces Round #512 (Div. 2) D.Vasya and Triangle 数学

题面 题意:给你n,m,k,在你在(0,0)到(n,m)的矩形内,选3个格点(x,y都是整数),使得三角形面积为n*m/k,不能找到则输出-1 题解:由毕克定理知道,格点多边形的面积必为1/2的整数倍,所以首先n*m/k必须是1/2的整数倍,也就是2*n*m%k要等于0,不等于就输出-1 然后对于面积,我们知道底?高*1/2=面积,a*b*1/2=n*m/k,我们很显然想到一种构造方法,(0,0),(0,a),(b,0); 有人就要问,会不会有一种,使得无法找到整数a,b,满足这种直角三角形点,

Codeforces-GYM101873 G Water Testing 皮克定理

题意: 给定一个多边形,这个多边形的点都在格点上,问你这个多边形里面包含了几个格点. 题解: 对于格点多边形有一个非常有趣的定理: 多边形的面积S,内部的格点数a和边界上的格点数b,满足如下结论: 2S=2a+b-2 证明不难,对于格点长方形显然成立,对于高度为1的直角三角形也显然成立,那么我们想象,把两个满足皮克定理的多边形,沿着它们的一个平行与格线的边拼起来,假设拼的这个边长度为k,这两个图形原来在这里各有k个边界格点,拼起来之后,这2k个边界格点,变成了2个边界格点,和k-2个内部格点,神

P2735 电网 Electric Fences

题目描述 在本题中,格点是指横纵坐标皆为整数的点. 为了圈养他的牛,农夫约翰(Farmer John)建造了一个三角形的电网.他从原点(0,0)牵出一根通电的电线,连接格点(n,m)(0<=n<32000,0<m<32000),再连接格点(p,0)(p>0),最后回到原点. 牛可以在不碰到电网的情况下被放到电网内部的每一个格点上(十分瘦的牛).如果一个格点碰到了电网,牛绝对不可以被放到该格点之上(或许Farmer John会有一些收获).那么有多少头牛可以被放到农夫约翰的电网

POJ 1265 计算几何 多边形面积 内部格点数 边上格点数

链接: http://poj.org/problem?id=1265 题意: 给你一个多边形,求它的面积,内部格点数目,边上格点数目 题解: pick公式: 给定顶点坐标均是整数点的简单多边形,有 面积=内部格点数目+边上格点数目/2+1 边界上的格点数: 把每条边当做左开右闭的区间以避免重复,一条左开右闭的线段(x1,y1)->(x2,y2)上的格点数为: gcd(x2-x1,y2-y1). 代码: 1 #include <map> 2 #include <set> 3 #

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

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