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的更多相关文章

  1. poj1265Area(pick定理)

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

随机推荐

  1. Entity Framework 6.1-Code First

    原文:Entity Framework 6.1-Code First Code First-代码优先,先创建好领域模型.新建MyDbContext继承DbContext.根据代码自动生成数据库 Cod ...

  2. JAVA生成EXCEL图表

    跟据客户的要求,需要开发一套包括图形的报表,还需要导出WORD 图表需要这样: 这样: 这样: 还有这样: 接下来是实现思路: 以往用的最多的就是JFreechart,手上也有实现各种图形的资源,但是 ...

  3. Cocos2d-x优化中图片优化

    在2D游戏中图片无疑是最为重要的资源文件,它会被加载到内存中转换为纹理,由GPU贴在精灵之上渲染出来.它能够优化的方面很多,包括:图片格式.拼图和纹理格式等,下面我们从这几个方面介绍一下图片和纹理的优 ...

  4. ios 解析json,xml

    一.发送用户名和密码给服务器(走HTTP协议) // 创建一个URL : 请求路径    NSString *urlStr = [NSString stringWithFormat:@"ht ...

  5. NOIP2011(提高组)DAY2---观光公交(vijosP1741)

    描述 风景迷人的小城Y市,拥有n个美丽的景点.由于慕名而来的游客越来越多,Y市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0分钟出现在1号景点,随后依次前往2.3.4……n号景 ...

  6. c语言与c++基础知识

    1.后缀名: C++/C程序的头文件以.h为后缀,C程序的源文件以.c为后缀,C++程序的源文件通常以.cpp为后缀(有些书中介绍有一些系统以.cc或.cxx为后缀的源文件).在Linux系统下的gc ...

  7. Windows服务器nginx+tomcat服务负载均衡

    一.安装两个tomcat服务自启动 1. 解压两个tomcat,名称为分别1,2 2. 配置环境变量 3. 修改文件server.xml中的三个端口号,使得两个tomcat不冲突 (1)<Ser ...

  8. linux 运维知识体系

    这里将会介绍一下,LINUX运维工程师的知识体系. 只能说是个人理解吧.并不是必要或者充分的,仅供网友参考. 大部分本博客都有涉及,并不完整. 1.LINUX运维基础 1.1.LINUX系统的简介,分 ...

  9. 借网上盛传2000w记录介绍多进程处理

    2000w的数据在网上搞得沸沸扬扬,作为技术宅的我们也来凑凑热闹.据了解网上有两个版一个是数据库文件另一个是CSV文件的,前者大小有好几个G后者才几百M.对于不是土豪的我们当然下载几百M的.至于在哪下 ...

  10. Dapper full example

    Skip to content Sign up Sign in This repository Explore Features Enterprise Blog Watch Star , Fork S ...