上一页 1 ··· 40 41 42 43 44 45 46 47 48 ··· 85 下一页
  2012年2月17日
摘要: POJ_3348 先将凸包找到,然后再用叉积算出多边形的面积之后除以50就是结果。#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXD 10010struct point{ int x, y;}p[MAXD], res[MAXD];int N, P;int cmp(const void *_p, const void *_q){ point *p = (point *)_p, *q = (point *)_q; if(p->y == q->y) return p-> 阅读全文
posted @ 2012-02-17 17:00 Staginner 阅读(376) 评论(0) 推荐(0) 编辑
摘要: POJ_2007 这个题目本质上还是求凸包,然后按题目指定顺序输出各个点即可。#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>#define MAXD 60#define zero 1e-8struct point{ int x, y;}p[MAXD], res[MAXD];int N, P;int cmp(const void *_p, const void *_q){ point *p = (point *)_p, *q = (point *)_q; i 阅读全文
posted @ 2012-02-17 16:24 Staginner 阅读(334) 评论(0) 推荐(0) 编辑
摘要: HDU_1392 这个题目比较疑惑的一点就是当N==2时,只要输出两点间距离即可,而不是输出距离的两倍。 至于为什么求凸包的周长就可以,我们不妨用反证法去证明:凸包上点绳子必然要经过的,同时我们找不到一种更优的结果使得绳子的某一部分不是在凸包的边长上。因而我们只要求得凸包并计算其周长即可。 这个算是我学习graham凸包算法之后的处女作了。#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>#define MAXD 110#define zero 1e-8str 阅读全文
posted @ 2012-02-17 15:17 Staginner 阅读(432) 评论(0) 推荐(0) 编辑
  2012年2月16日
摘要: POJ_1329 题目主要就是在求三角形的外心,即各边中垂线的交点,推导出公式后直接计算即可。#include<stdio.h>#include<string.h>#include<math.h>#define zero 1e-8double x3, y3, x4, y4, x5, y5;double dcmp(double x){ if(fabs(x) < zero) return 0; if(x < 0) return -1; return 1;}char sign(double x){ return x < 0 ? '- 阅读全文
posted @ 2012-02-16 22:33 Staginner 阅读(327) 评论(0) 推荐(0) 编辑
摘要: POJ_1375 这个题目可以先用解析几何的方法求出每个圆的两条切线并得到阴影部分,最后再将阴影部分合并即可。 在合并阴影的时候,为了处理起来方便,可以先按左端点排序,这时可以从后往前枚举每个区间,然后从这个区间开始向前查找,如果前面某个区间和这个区间有交集,就删掉这个区间,并将前面那个区间的范围更新成两个区间的并集,这样做是O(n^2)的复杂度。 更好的办法就是首先将第一个区间的左端点赋给x,右端点赋给y,然后依次向后扫描区间,如果当前区间的左端点比y大就输出记录的x、y,并将x、y更新成当前区间的左右端点的值,如果当前区间的左端点不比y大,那么就将y更新成当前区间的右端点及y两者的较大.. 阅读全文
posted @ 2012-02-16 16:34 Staginner 阅读(456) 评论(0) 推荐(0) 编辑
摘要: POJ_2954 这个题目的核心是Pick定理:对给定顶点坐标均是整点的简单多边形,其面积A和内部格点数目i、边上格点数目b满足:A=i+b/2-1。 因此我们可以先求出三角形的面积以及边上的格点数,进而可以得到三角形内部的格点数。边上的格点数可以通过求|dx|和|dy|的最大公约数得到。#include<stdio.h>#include<string.h>int x1, y1, x2, y2, x3, y3;long long int ans, din, don;long long int det(int x1, int y1, int x2, int y2){ re 阅读全文
posted @ 2012-02-16 13:37 Staginner 阅读(189) 评论(0) 推荐(0) 编辑
摘要: POJ_1265 这个题目的核心是Pick定理:对给定顶点坐标均是整点的简单多边形,其面积A和内部格点数目i、边上格点数目b满足:A=i+b/2-1。 因此我们可以先求出多边形的面积以及边上的格点数,进而可以得到多边形内部的格点数。边上的格点数可以通过求|dx|和|dy|的最大公约数得到。#include<stdio.h>#include<string.h>long long int ans, din, don;int abs(int x){ return x < 0 ? -x : x;}long long int det(int x1, int y1, int 阅读全文
posted @ 2012-02-16 13:06 Staginner 阅读(248) 评论(0) 推荐(0) 编辑
  2012年2月14日
摘要: POJ_1654 由于多边形的点都是顺序走出来的,因此直接应用求多边形面积的公式即可。#include<stdio.h>#include<string.h>#define zero 1e-8#define MAXD 1000010char b[MAXD];int dx[] = {0, -1, 0, 1, -1, 0, 1, -1, 0, 1}, dy[] = {0, -1, -1, -1, 0, 0, 0, 1, 1, 1};long long int det(int x1, int y1, int x2, int y2){ return (long long int) 阅读全文
posted @ 2012-02-14 09:33 Staginner 阅读(158) 评论(0) 推荐(0) 编辑
  2012年2月13日
摘要: POJ_2074 首先来讲,我们能够看全房子的视野构成的平面一定是被某两个障碍物的端点卡住的(将Property Line的两个端点也视作障碍物的端点),否则我们的视野一定可以继续向两侧延伸。 于是,我们就可以枚举任意两个端点,然后计算出视野与Property Line相交的区间,然后再枚举所有障碍物,如果没有障碍物在这个视野之内,那么这个视野就是可行的,然后更新区间的范围即可。 此外,对于Property Line上最长区间长度为0的情况不必纠结,怎么处理都可以,经测试后认为题目应该没有这样的数据。 最后说明一下,这个题没有给出数据范围,但依网上的解题报告来看,障碍物的数量应该是不超过10. 阅读全文
posted @ 2012-02-13 23:30 Staginner 阅读(562) 评论(0) 推荐(0) 编辑
摘要: POJ_1584 这个题目思路是比较直接的,首先去判断这个多边形是否为凹多边形,如果不是凹多边形,就去判断圆是否在多边形内。 在判断多边形是否为凹多边形时,可以将相邻的两个线段做叉积,从而判断在沿四边形走时是否只向左或者只向右转,从而说明这个多边形是否为凹多边形。从discuss里面看到说有的数据相邻的两个线段是共线的,要注意一下这样的情况。 在判断圆是否在多边形内时,可以分两步,第一步判断圆心是否在多边形内,第二步判断圆和多边形是否“相割”。 判断圆心是否在多边形内时,可以先规定好多边形的正方向,然后看这个点是否在所有线段向量的同一侧。 判断圆和多边形是否“相割”时,可以先判断是否有多边形的 阅读全文
posted @ 2012-02-13 15:30 Staginner 阅读(176) 评论(0) 推荐(0) 编辑
上一页 1 ··· 40 41 42 43 44 45 46 47 48 ··· 85 下一页