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定理的一些应用 题意不好懂, ...
随机推荐
- css3学习笔记之背景
background-size background-size指定背景图像的大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 &l ...
- Apache 使用密码文件验证用户
使用文本文件作为密码文件 创建密码文件 需要使用htpasswd.exe文件来创建用户密码文件 语法: htpasswd -c '文件完整路径' 用户名 向一个用户密码文件中添加一个新用户 语法: h ...
- spring读取prperties配置文件(2)
接上篇,spring读取prperties配置文件(1),这一篇主要讲述spring如何用annotation的方式去读取自定义的配置文件. 这里我先定义好属性文件"user.propert ...
- UVALive 3027(并查集)
题意:某公司的各企业群要建立联系,I i j 表示企业i与企业j建立联系,并且以企业j为中心(并查集中的父亲)(企业j为暂时的中心企业),E i 表示查询企业 i 距离此时的中心企业的距离.各企业间的 ...
- jquery文字左右滚动
实现jquery文字左右滚动 <div class="fl">中奖名单:</div> <div class="scrollText" ...
- oracle 之路目录
oracle linux单机安装 oracle windows单机安装创建实例卡死解决办法 oracle rac安装 HPDL380G8平台11.2.0.3 RAC实施手册 pl-sql develo ...
- Traveller项目介绍
Traveller,翻译为旅行家,是我用来实践最佳web技术的项目,主题是一个给旅行爱好者提供旅行信息的网站. 目标是组合现最流行的web技术,实现符合中国用户使用习惯的网站. 相关网址 Git:ht ...
- Get vertical scrollbar width and example
$.scrollbarWidth = function () { var parent, child, width; if (width === undefined) { parent = $('&l ...
- Mysql Java type mapping
MySQL Type Java Type ---------- --------- CHAR String VARCHAR String LONGVARCHAR String NUMERIC java ...
- CSS 中的 em单位
em的对应的像素值如何计算,一言以蔽之:em就是倍数当前元素font-size的倍数,其结果就是当前字体的像素值乘以em的值,至于font-size来自何处?有两个来源:继承自父元素和通过CSS直接设 ...