样例:

输入:
12
3 1
6 3
9 2
8 4
9 6
9 9
8 9
6 5
5 8
4 4
3 5
1 3
12
1000 1000
2000 1000
4000 2000
6000 1000
8000 3000
8000 8000
7000 8000
5000 4000
4000 5000
3000 4000
3000 5000
1000 3000
4
0 0
1000000 0
1000000 1000000
0 1000000
4
0 0
100 0
100 100
0 100

输出:

21

25990001

999998000001

9801

分析:Pick定理:一个计算点阵中顶点在格点上的多边形面积公式:S=a+b/2.0-1,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积。

首先利用叉积求多边形的面积S;

然后求出b,方法是枚举每条边,然后以改边构成一个直角三角形,直角边长度是n,m,斜边上有的整数点的个数是gcd(n,m)-1(不包括两端点)最后b=b+n;

即可

最后a=S+1-b/2.0;

需要注意的地方是:a可能爆int

  1. #include"stdio.h"
  2. #include"string.h"
  3. #include"algorithm"
  4. #include"stdlib.h"
  5. #include"math.h"
  6. #include"map"
  7. #include"queue"
  8. #include"iostream"
  9. #define M 1009
  10. #define inf 0x3f3f3f3f
  11. #define eps 1e-9
  12. using namespace std;
  13. struct node
  14. {
  15. double x,y;
  16. node(){}
  17. node(double x,double y)
  18. {
  19. this->x=x;
  20. this->y=y;
  21. }
  22. node operator-(node a)
  23. {
  24. return node(x-a.x,y-a.y);
  25. }
  26. node operator+(node a)
  27. {
  28. return node(x+a.x,y+a.y);
  29. }
  30. double operator*(node a)
  31. {
  32. return x*a.x+y*a.y;
  33. }
  34. double operator^(node a)
  35. {
  36. return x*a.y-y*a.x;
  37. }
  38. }p[M];
  39. double len(node a)
  40. {
  41. return sqrt(a*a);
  42. }
  43. double dis(node a,node b)
  44. {
  45. return len(b-a);
  46. }
  47. double cross(node a,node b,node c)
  48. {
  49. return (b-a)^(c-a);
  50. }
  51. int gcd(int a,int b)
  52. {
  53. return b==?a:gcd(b,a%b);
  54. }
  55. int point(node a,node b)
  56. {
  57. int m=(int)(fabs(b.x-a.x)+0.5);
  58. int n=(int)(fabs(b.y-a.y)+0.5);
  59. int r=gcd(m,n);
  60. return r-;
  61. }
  62. int main()
  63. {
  64. int n;
  65. while(scanf("%d",&n),n)
  66. {
  67. for(int i=;i<n;i++)
  68. scanf("%lf%lf",&p[i].x,&p[i].y);
  69. double sum=;
  70. node O(,);
  71. double num=n;
  72. for(int i=;i<n;i++)
  73. {
  74. num+=point(p[i],p[(i+)%n]);
  75. sum+=cross(O,p[i],p[(i+)%n]);
  76. }
  77. sum=fabs(sum)/2.0;
  78. double ans=sum+-0.5*num;
  79. printf("%.0f\n",ans+0.001);
  80. }
  81. return ;
  82. }
  83. /*
  84. 12
  85. 3 1
  86. 6 3
  87. 9 2
  88. 8 4
  89. 9 6
  90. 9 9
  91. 8 9
  92. 6 5
  93. 5 8
  94. 4 4
  95. 3 5
  96. 1 3
  97. 12
  98. 1000 1000
  99. 2000 1000
  100. 4000 2000
  101. 6000 1000
  102. 8000 3000
  103. 8000 8000
  104. 7000 8000
  105. 5000 4000
  106. 4000 5000
  107. 3000 4000
  108. 3000 5000
  109. 1000 3000
  110. 4
  111. 0 0
  112. 1000000 0
  113. 1000000 1000000
  114. 0 1000000
  115. 4
  116. 0 0
  117. 100 0
  118. 100 100
  119. 0 100
  120. */

UVa 10088 - Trees on My Island (pick定理)的更多相关文章

  1. LightOJ 1418 Trees on My Island (Pick定理)

    题目链接:LightOJ 1418 Problem Description I have bought an island where I want to plant trees in rows an ...

  2. UVa 10088 (Pick定理) Trees on My Island

    这种1A的感觉真好 #include <cstdio> #include <vector> #include <cmath> using namespace std ...

  3. HDU 3775 Chain Code ——(Pick定理)

    Pick定理运用在整点围城的面积,有以下公式:S围 = S内(线内部的整点个数)+ S线(线上整点的个数)/2 - 1.在这题上,我们可以用叉乘计算S围,题意要求的答案应该是S内+S线.那么我们进行推 ...

  4. 【POJ】2954 Triangle(pick定理)

    http://poj.org/problem?id=2954 表示我交了20+次... 为什么呢?因为多组数据我是这样判断的:da=sum{a[i].x+a[i].y},然后!da就表示没有数据了QA ...

  5. Area(Pick定理POJ1256)

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5429   Accepted: 2436 Description ...

  6. poj 2954 Triangle(Pick定理)

    链接:http://poj.org/problem?id=2954 Triangle Time Limit: 1000MS   Memory Limit: 65536K Total Submissio ...

  7. poj 1265 Area (Pick定理+求面积)

    链接:http://poj.org/problem?id=1265 Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:  ...

  8. poj1265Area(pick定理)

    链接  Pick定理是说,在一个平面直角坐标系内,如果一个多边形的顶点全都在格点上,那么这个图形的面积恰好就等于边界上经过的格点数的一半加上内部所含格点数再减一. pick定理的一些应用 题意不好懂, ...

  9. pick定理:面积=内部整数点数+边上整数点数/2-1

    //pick定理:面积=内部整数点数+边上整数点数/2-1 // POJ 2954 #include <iostream> #include <cstdio> #include ...

随机推荐

  1. 微信公众账号开发教程(二) 基础框架搭建——转自http://www.cnblogs.com/yank/p/3392394.html

    上一章,我们已经初步讲解了微信公众账号开发的基本原理,今天我们来探索设计实现. 首先我们设计了模块层次图,当然图中只是给出一种实现方式,不局限于此.具体见下图. 主要功能介绍如下: 1)请求接口层.处 ...

  2. dubbo,gradle,spring build from source

    https://github.com/alibaba/dubbo http://www.csdn.net/article/2012-11-13/2811827-alibaba-Dubbo-Distri ...

  3. 【C】用我所学去讲C语言指针

    很多人不敢讲C的指针,有些人讲不清,有些人怕讲错.初生牛犊不怕虎,就让我讲讲. 下面开始. 一.指针的定义  指针是内存单元的编号.内存单元是以字节为单位的.所以指针就是字节的编号. 比如我们的个人电 ...

  4. BeanUtils 学习教程

    what happens in more sophisticated environments where you do not necessarily know ahead of time whic ...

  5. SQL Server存储机制二

    http://blog.csdn.net/ltylove2007/article/details/21084585 http://www.cnblogs.com/anding/p/3254674.ht ...

  6. js实现选项卡

    通过JavaScript实现如上选项卡切换的效果. 实现思路: 一.HTML页面布局 选项卡标题使用ul..li 选项卡内容使用div 二.CSS样式制作 整个选项卡的样式设置 选项卡标题的样式设置 ...

  7. 遍历ModelState中存储的错误信息

    在服务器端验证中,有时我们添加了一个ModelError,然后还需要将该信息以JS的形式返回到客户端.如: [HttpPost] public ActionResult Index(LogOnMode ...

  8. Magento PHP Extension "curl" must be loaded解决方法

    我记得我第一次在xampp装magento的时候,进入后台时提示PHP Extension "curl" must be loaded 在网页上查了下原因和解决方法,发现是mage ...

  9. sqlserver 视图能否有变量

    不能,sqlserver 视图一般不能有变量,也不能带存储过程

  10. detailsview 样式小问题

    detailsview不显示表头,设置HeaderText=""就可以,不知道为什么,如果有值,其他方式都没有调好! 内网格显示为0,Gridlines="None&qu ...