poj 1265 Area
来源:互联网 发布:校准时间软件 编辑:程序博客网 时间:2024/05/01 16:29
题意:给你个多边形,求出多边形内部的点,边界上的点,多边形的面积。
Pick定理:如果一个简单多边形(以下称为“多边形”)的每个顶点都是直角坐标平面上的格点,则称该多边形为格点多边形.若一个面积为S的格点多边形,其边界上有a个格点,内部有b个格点,则S=a/2+b-1.
边界上的点:假设给定边e,两端点为p1(x1,y1),(x2,y2);则边e上的格点数为GCD(x2-x1,y2-y1),注意:此处求出的格点数只包含一个端点。
多边形面积用叉积求,链接:http://www.cnblogs.com/xiexinxinlove/p/3708147.html
#include <cstdio>#include <cstring>struct Point{ double x,y;};Point points[110];int n;int abs(int num){ return num > 0 ? num :-num;}double det(Point &a, Point &b){ return (a.x*b.y - b.x*a.y);}int gcd(int a, int b){ int temp; while(b) { temp = a % b; a = b; b = temp; } return a;}double getArea(){ double sum = 0; points[n] = points[0]; for(int i = 0; i < n; ++i) sum += det(points[i],points[i+1]); return sum/2.0;}int main(){ int t,cnt; double area; int time = 0; scanf("%d",&t); while(t--) { ++time; cnt = 0; scanf("%d",&n); int x = 0,y = 0,dx,dy; for(int i = 0; i < n; ++i) { scanf("%d %d",&dx,&dy); cnt += gcd(abs(dx),abs(dy)); points[i].x = x + dx; points[i].y = y + dy; x = points[i].x; y = points[i].y; } area = getArea(); printf("Scenario #%d:\n",time); printf("%d %d %.1f\n\n",(int)area+1-cnt/2,cnt,area); } return 0;}
0 0
- Poj 1265 Area
- poj 1265 Area
- POJ 1265 Area
- poj 1265 Area
- POJ 1265 Area
- POJ 1265 Area
- POJ 1265 Area
- POJ 1265 Area
- poj 1265 Area
- POJ 1265:Area
- POJ 1265 Area
- POJ 1265 Area
- poj 1265 Area
- poj-1265 Area
- poj 1265 Area
- POJ 1265 Area
- POJ 1265 Area
- poj 1265 Area
- SylixOS CAN驱动框架之一
- js将数组对象转化为json格式的数组
- Spring系列(一)——简介
- editText禁止第一个输入0
- 设计模式-代理模式
- poj 1265 Area
- Hexo搭建个人博客
- bat文件·启动程序&打开文件夹
- 开篇博客
- 性能优化之算法和流程控制
- HashMap源码分析(基于JDK1.6)
- PAT BASIC LEVEL 1056. 组合数的和(15)
- 模版模式
- 深度学习(十三)caffe之训练数据格式