博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 10088 - Trees on My Island (pick定理)
阅读量:5139 次
发布时间:2019-06-13

本文共 1805 字,大约阅读时间需要 6 分钟。

样例:

输入:

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==0?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-1; 61 } 62 int main() 63 { 64     int n; 65     while(scanf("%d",&n),n) 66     { 67         for(int i=0;i

 

转载于:https://www.cnblogs.com/mypsq/p/4726015.html

你可能感兴趣的文章
CLR via C#(10)-参数
查看>>
安装和使用JD-Eclipse插件
查看>>
《JavaScript高级程序设计》学习笔记12篇
查看>>
项目Alpha冲刺--9/10
查看>>
VSFTPD的安装配置
查看>>
Elasticsearch常用操作api
查看>>
【系统】深入理解计算机系统·持续更新
查看>>
【C/C++】C/C++中Static的作用详述
查看>>
【Android】Android输入子系统
查看>>
架构之重构的12条军规
查看>>
logstash快速入门 (这篇文章很不错 ) | 两种方式往logstash传输数据实例:Apache 日志(从文件获取)、Syslog方式...
查看>>
linux中修改ip地址
查看>>
异步委托
查看>>
poj 3368_2
查看>>
李晓菁201771010114《面向对象程序设计Java》第十五周学习总结
查看>>
利用Fiddler或Charles进行mock数据
查看>>
从零开始的全栈工程师——js篇(cookie)
查看>>
java 锁机制(synchronized 与 Lock)
查看>>
深入浅出多线程系列之一:简单的Thread
查看>>
Server酱微信推送中的问题
查看>>