POJ 1265 Area(计算几何--网格)
来源:互联网 发布:c语言心形图案 编辑:程序博客网 时间:2024/04/29 02:22
博客原文地址:http://blog.csdn.net/xuechelingxiao/article/details/39159863
Area
题目大意:给出每个点相对于前一个点的坐标增量,增量都是整数,会得到一个在网格上多边形,求多边形内的格点、多边形上的格点以及多边形的面积。
解题思路:这个题主要是Pick定理的应用(Pick定理传送门),另外还有几个其他的知识点。
Pick定理:平面上以格子点为顶点的简单多边形的面积=边上的点数/2+内部的点数+1。
计算多边形边上的格点数目:Σ ( GCD ( abs(dx), abs(dy)) ) dx是每个点相对于前一个点的x的增量, dy是每个点相对于前一个点的y的增量。
代码如下:
#include <stdio.h>#include <math.h>#include <stdlib.h>struct Point { int x, y;} P[105];int gcd(int a, int b){ return b?gcd(b, a%b):a;}int main(){ int n; int x, y; int T, icase = 1; scanf("%d", &T); while(T--) { scanf("%d", &n); double area = 0; int sum = 0; P[0].x = P[0].y = 0; for(int i = 1; i <= n; ++i) { scanf("%d%d", &x, &y); P[i].x = P[i-1].x+x; P[i].y = P[i-1].y+y; area += P[i].x*P[i-1].y-P[i].y*P[i-1].x; sum += gcd(abs(x), abs(y)); } area = fabs(area*0.5); printf("Scenario #%d:\n", icase++); printf("%.0lf %d %.1lf\n\n", (area*2-sum+2)/2, sum, area); } return 0;}
0 0
- POJ 1265 Area(计算几何--网格)
- POJ 1265 Area (计算几何)(Pick定理)
- poj 1654 Area(计算几何)
- POJ 1654 Area(计算几何)
- POJ 1654 Area(计算几何)
- 【计算几何】poj 1654 Area
- Area poj 1654 计算几何
- 计算几何--POJ--1654--Area
- poj 1265 Area 计算几何Pick定理 && poj 2954 Triangle
- POJ 1265Area(几何应用)
- POJ 1654 Area计算几何(解题报告)
- POJ 1927 Area in Triangle(计算几何)
- POJ 1654 Area 计算几何基础
- poj1654 Area (计算几何)
- poj1265 Area(计算几何)
- [POJ1654]Area(计算几何)
- [POJ1265]Area(计算几何)
- POJ 1265 Area 几何公式
- 埃及分数(迭代加深搜索)【转】
- 3-创建web服务
- CocoaPods安装和使用教程
- Android复习练习十四(客户端账户登陆服务端)
- LeetCode 71 Search in Rotated Sorted Array II
- POJ 1265 Area(计算几何--网格)
- 【线段树】 ZOJ 3349 Special Subsequence
- 容斥性原理的应用(欧拉函数)
- ASP.NET或WinFrom中获取汉子的拼音首字母
- acdream(18) Integration of Polynomial
- requestWindowFeature()的应用
- android 事件监听,蓝牙开启与关闭,java_Date日期
- 最短路
- oc中在NSdate中获取年月日的方法