题目:Area

先说说什么是Pick定理吧

Pick定理:设以整数点为顶点的多边形的面积为S,多边形内部的整数点数为N,多边形边界上的整数点数为L,则 S=L/2 + N-1。

而对于线段上的整点数我们可以通过以下计算得到:

int SegmentPointNum(Point A,Point B)
{
return gcd(abs(A.x-B.x),abs(A.y-B.y));
}

然后我们把所有线段的整点数加起来就是多边形边界上的整点数了,至于多边形的面积就很容易。然后我们就可以求出内部的整点数。

/*
Code POJ 1265 By Goujinping in NEFU
*/
#include <iostream>
#include <stdio.h>
using namespace std;
struct Point
{
int x;
int y;
};
int I,E,area;
int Abs(int x)
{
return x<0? -x:x;
}
int gcd(int a,int b)
{
return b? gcd(b,a%b):a;
}
int OnEdge(Point *p,int n)
{
int ret=0,i;
for(i=0;i<n;i++)
ret+=gcd(Abs(p[i].x-p[(i+1)%n].x),Abs(p[i].y-p[(i+1)%n].y));
return ret;
}
int InSide(Point *p,int n)
{
int i;area=0;
for(i=0;i<n;i++)
area+=p[(i+1)%n].y*(p[i].x-p[(i+2)%n].x);
if(area<0) area=-area;
return (area-E)/2+1;
}
int main()
{
Point p[255];
int dx,dy;
int t,i,n,k=1;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
p[0].x=0;p[0].y=0;
for(i=0;i<n;i++)
{
scanf("%d%d",&dx,&dy);
p[(i+1)%n].x=p[i].x+dx;
p[(i+1)%n].y=p[i].y+dy;
}
E=OnEdge(p,n);
I=InSide(p,n);
printf("Scenario #%d:\n%d %d %.1lf\n\n",k++,I,E,area/2.0);
}
return 0;
}

POJ1265(Pick定理的应用)相关推荐

  1. poj 1265 Area(pick 定理)

    链接:poj 1265 题意:从原点出发.给出一些dx,dy移动增量,终于形成一个多边形, 求多边形内部的格点数目,边上的格点数目 .以及面积. 补充知识: 1.以格子点为顶点的线段.覆盖的点的个数为 ...

  2. pku 2954 Triangle pku 1265 Area Pick定理的应用 + 叉积求多边形面积

    Pick定理证明:http://translate.google.com/translate?u=http://episte.math.ntu.edu.tw/articles/sm/sm_25_10_ ...

  3. 整数点与Pick定理

    Pick 定理   设以整数点为顶点的多边形的面积为S,多边形内部的整数点数为N,多边形边界上的整数点数为L,则 N+1/2L-1=S. 对于N与L的计算由下面的程序给出: typedef struc ...

  4. Luogu P2735 电网【真·计算几何/Pick定理】By cellur925

    题目传送门 刷USACO偶然遇到的,可能是人生中第一道正儿八经的计算几何. 题目大意:在平面直角坐标系中给你一个以格点为顶点的三角形,求三角形中的整点个数. 因为必修5和必修2的阴影很快就想到了数学中 ...

  5. 【总结】pick定理Farey序列

    pick定理及其证明 pick定理 结论 在一个平面直角坐标系内,以整点为顶点的简单多边形,设其内部整点数为aaa,边上(包括顶点)的整点数为bbb,则它的面积S=a+b2−1S = a+\frac ...

  6. POJ 1265 Area(Pick定理)

    POJ 1265 Area(Pick定理) 根据pick定理来做 皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式该公式可以表示为 2S=2a+b−2 其中a表示多边形内部的点数,b表示多边形边 ...

  7. poj 2954 Triangle (pick 定理 的应用 )

    题意 : 求一个三角形中的 整数 点有多少个? 题接: Pick定理证明:http://translate.google.com/translate?u=http://episte.math.ntu. ...

  8. pick定理及其证明

    转自:http://www.cnblogs.com/yujunyong/articles/2010482.html pick定理:在一个平面直角坐标系内,以整点为顶点的简单多边形(任两边不交叉),它内 ...

  9. POJ 1265 pick 定理

    首先来脑补一下几个几何知识 非常奇妙的证明:图形必在格点之外 从cut-the-knot上看到的. 问题:     设想一个平面上布满间距为1的横纵直线,形成由一个个1×1正方形组成的网格.任意给一个 ...

最新文章

  1. 规则就够用?还是必须上机器学习?46页ppt教你如何把规则引擎和机器学习融会贯通...
  2. showModalDialog弹窗
  3. 不显示坐标刻度_如何使用坐标交叉位置来改变Excel图表的展现形态
  4. SPOJ 3267: DQUERY 树状数组,离线算法
  5. ADB 无线连接设备
  6. window下nginx反向代理配置
  7. 将字符串使用md5加密
  8. Python中利用numpy将数组(矩阵)存成csv文件,将csv文件读取为数组(矩阵)
  9. python输出图像plt_Matplotlib(pyplot)savefig输出空白图像
  10. Android app内存管理的16点建议
  11. MATLAB2017安装VLFeat
  12. 【中山大学】【东校区】【无线路由】【wr703n】【openwrt】电脑客户端的iptv网络电视在无线路由下不能打开的解决方法
  13. iOS 打包32bit64 universal-framework
  14. 赛锐信息:5个方面帮您应对 SAP License 审计
  15. 【哈佛公开课】积极心理学笔记-05环境的力量
  16. xilinx中pll的使用与仿真步骤
  17. ES6中的entries
  18. C# 键盘中的按键对应的KeyValue
  19. 免费模式破冰PC业瓶颈
  20. oracle reorg的意义,Oracle Reorg 的形式与相关的script - 2016-02-26

热门文章

  1. 微服务架构的实施现状
  2. 日志规范之了解slf4j
  3. hough变换检测直线 matlab,求能够运行的用matlab进行hough变换直线检测的程序。急!...
  4. Spring @Import源码解析
  5. redis(12)--事件,客户端,服务器
  6. 2021宁夏英语高考成绩查询,2021宁夏高考成绩官方查询时间及入口
  7. 如何实现一个java窗口_如何实现多个弹出窗口?
  8. autoflowchart软件使用步骤_编程怎么入门,7个步骤带你飞, 网友:上车!
  9. P1312 Mayan游戏 [模拟][搜索]
  10. AWS Amplify Console:赋予应用程序快速部署的能力