POJ1265Area
http://poj.org/problem?id=1265
题意 : 给你一个点阵,上边有很多点连成的多边形,让你求多边形内部的点和边界上的点以及多边形的面积,要注意他每次给出的点并不是点的横纵坐标,而是相对于上一个点的横纵坐标离开的距离dx,dy,所以你还要求一下每个点的坐标,然后再进行别的操作就可以了
思路 :先用GCD函数求出边界上的点,用Pick公式求出边界多边形内部的格点数
Pick公式:给定顶点坐标均是整点的简单多边形,有:
面积=内部格点数目+边上格点数目/2-1;
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std ;
struct node
{
double x ;
double y ;
node() {}
node(double a,double b):x(a),y(b){}
}ch[] ;
int m ;
double det(const node &a,const node &b)//计算两个向量的叉积
{
return a.x*b.y-a.y*b.x;
}
double area()//求多边形的面积
{
double sum = 0.0 ;
ch[m]=ch[];
for(int i = ; i < m ; i++)
sum += det(ch[i],ch[i+]) ;
return sum/2.0 ;
}
int gcd(int a,int b)
{
int temp ;
if(a > b)
{
temp = a ;
a = b ;
b = temp ;
}
while(b != )
{
temp = a%b ;
a = b ;
b = temp ;
}
return a ;
}
int main()
{
int n ;
cin>>n ;
for(int i = ; i < n ; i++)
{
int count = ;
cin>>m ;
int xx = , yy = ,a,b;
ch[].x = ;
ch[].y = ;
for(int j = ; j < m ; j++)
{
cin>>a>>b ;
count +=gcd(abs(a),abs(b)) ;//求边界格点数目
ch[j+].x = a + xx ;
ch[j+].y = b + yy ;
xx = ch[j+].x ;
yy = ch[j+].y ;
}
double sum = area() ;
cout<<"Scenario #"<<i+<<":"<<endl;
printf("%d %d %.1lf\n\n",int(sum)+-(count/),count,sum);
}
}
注 :GCD函数还有更简单的书写方式
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
POJ1265Area的更多相关文章
- poj1265Area(pick定理)
链接 Pick定理是说,在一个平面直角坐标系内,如果一个多边形的顶点全都在格点上,那么这个图形的面积恰好就等于边界上经过的格点数的一半加上内部所含格点数再减一. pick定理的一些应用 题意不好懂, ...
随机推荐
- .NET的JSNO 序列化跟反序列化
由于本人最近在写webservice,之前一直都同通过AJAX,在服务端处理业务,但是最近需要写一些接口给其他人用,需要使用jsno的序列化与反序列化,什么是jsno就不多说,jsno的好处也不多说, ...
- Python Quick Start
1.安装Python 官网下载python: https://www.python.org/ 有2.x 3.x版本, 注意,python3.0不向下兼容2.x版本,有很多包3.0不提供 下载完后直接点 ...
- ios开发:代理设计模式
代理是一种简单而功能强大的设计模式,这种模式用于一个对象“代表”另外一个对象去做和实现一些东西. 主对象维护一个代理(delegate)的引用并且在合适的时候向这个代理发送消息,这个消息通知“代理”对 ...
- 关于delete
上面三图在debug下,delete的时候会以fe ee覆盖指针所指向要回收内存前后较大一块区域的值. 下图对于release下delete的时候会先用fe ee覆盖指针所指位置起6*4=24字节, ...
- mysql 导出表结构
mysql导出数据库各表结构,很简单只要一条命令即可: mysqldump -uxxx -d databasename [,table] > xxx.sql mysqldump中-d参数即为只导 ...
- Java多线程(六) 线程系列总结
多线程系列终于终结得差不多,本人对该系列所做的总结大致如下: 线程锁模块耗费了大量的时间,底层的AQS实现比较复杂.仍然没有时间总结源码部分,能够坚持写下这么几个篇幅的内容真心佩服自己....希望继续 ...
- 正文字体大小:大 中 小 解决configure: error: Cannot find libmysqlclient under /usr
今天在64位centos5.6系统上编译PHP5.2.17报错 checking for MySQL support... yes, shared checking for specified loc ...
- jQuery Mobile里xxx怎么用呀?(集成篇)
jQuery Mobile如何使用GA(Google Analytics)? 什么是GA: http://baike.baidu.com/view/34729.htm http://www.googl ...
- 鼠标滑过提示title
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1. ...
- 提高 Discuz 门户文章被百度收录的方法
如果你了解 SEO,你就该清楚使用 canonical URL 标签可以固定网页标准地址,可以提高网页的权重,有利于搜索引擎收录. 例如我的网站拥有两个子域名www.bbseat.com.cn和bbs ...