计算几何
taozifish
http://www.daimayu.com/
展开
-
POJ 1696 Space Ant (极角排序的应用)
#include#include#include#include#includeusing namespace std;struct Point{int x, y, num;}st;bool cmp_y(const Point &p1,const Point &p2){ return p1.y}int x_mult(Point op, Point sp, Point ep){ return (sp.x-op.x)*(ep.y-op.y)-(sp.y-op.y)*(ep.x-op.x);}int原创 2011-06-01 17:10:00 · 582 阅读 · 0 评论 -
2011 北京现场赛 B Hou Yi's secret
//题意:输入n个点,求最多的相似三角形个数//数据很小,直接暴力,但是有两个trick,点的共线和重合问题 。#include#include#include#include#includeusing namespace std;const double EP=1e-8;struct Point{double x, y;}p[20];struct T{Po原创 2011-10-23 12:16:30 · 595 阅读 · 0 评论 -
hdu 3902 Swordsman 判断多边形对称
//很久没写过计算几何了,想在东北邀请赛前热热手,找了这道比较水的题,结果还是纠结了一会。//一开始想当然的以为对称轴必过多边形重心,于是引入了重心优化,结果WA了N次,最后去掉这个,就过了。。。//加上每条边的中点,一共2*n个点。枚举n条可能的对称轴(p[i], p[i+n]),i从0到n-1。#include#include#include#include#include原创 2012-04-19 10:31:20 · 583 阅读 · 0 评论 -
hdu 4197 Popping Balloons
题意:输入n个圆,所有圆不覆盖原点,从原点至少发出多少条射线能穿过所有圆。(0解法:讲每个圆转化为角度区间 [ s , e ] ,区间范围 [ 0 , 2*Pi ) ,得到n段区间后按e值增序将区间排序,枚举起点进行贪心。复杂度:O(n*n)#include#include#include#include#includeusing namespace std;const原创 2012-05-07 13:31:23 · 617 阅读 · 0 评论 -
poj 2462 / hdu 1154 Cutting a polygon 线段在多边形内长度
//多边形点数为n,输入m条直线,分别输出它们在多边形内的长度,边界也算//求出直线与多边形的所有交点,排序后,判断每一段线段是否在多边形内(判断中点是否在多边形内),求和。#include#include#include#include#includeusing namespace std;const double EP=1e-8;inline double max(dou原创 2012-05-08 15:28:38 · 1070 阅读 · 3 评论 -
poj 2966 A safe way
WA在那放了一年了,现在再做感觉思路清晰多了。题意,求多边形外两点不经过多边形内部的最短路,可擦边过。先枚举判断任意两点间线段是否会经过多边形内部,再用Dijkstra求单源最短路。#include#include#include#include#includeusing namespace std;const double EP=1e-8;const double in原创 2012-05-08 22:44:00 · 807 阅读 · 0 评论 -
poj 2926 Requirements N维最远曼哈顿距离
以前写过1~3维的最远曼哈顿距离,(本博客第一篇,代码奇丑)这次写N维,可作模版。复杂度:O(n*2^m) (n个点,m维)原理: |x1-y1|+|x2-y2|+... ...+|xm-ym| 去掉绝对值后x、y分别都有2^m种状态,枚举之。#include #include #include #include #include using namespace std;原创 2012-05-16 22:22:10 · 3901 阅读 · 0 评论 -
山东省第二届ACM省赛 F题 Manhattan 解题报告
N维曼哈顿距离 传送门:http://blog.csdn.net/taozifish/article/details/7574294//省赛F题 Manhattan//三维点集求最远曼哈顿距离#include#includeconst int MAX=1000001;const int MIN=-1000001;using namespace std;int n,原创 2011-05-14 16:25:00 · 3326 阅读 · 2 评论 -
hdu 4368 Water World I
多校联合第七场的题,开始后50分钟第二个ac。简单的计算几何,思路比较明确,求出倾斜后的坐标,扫描一遍所有点,去掉那些水下的点,求一次面积,减去原来面积就行了。复杂度O(n)#include #include #include #include #include using namespace std;const double Pi=acos(-1.0);const doub原创 2012-08-14 19:33:51 · 766 阅读 · 2 评论 -
poj 1556 The Doors
计算几何+最短路通过线段是否完全相交判断两点的连通性。 #include#include#include#includeusing namespace std;const double inf=1e10;const double EP=1e-8;struct Point{ double x, y;}p[105]; //4*n+2stru原创 2012-09-06 15:26:49 · 406 阅读 · 0 评论 -
poj 3449 Geometric Shapes
求各种图形的相交问题,简化到求线段相交问题。WA了一次,原因是叉积相乘超出了int范围,以后要注意! #include#include#include#include#includeusing namespace std;char str[30][3], ans[30];int n;struct Point{ int x, y; Point operat原创 2012-09-13 14:54:20 · 534 阅读 · 0 评论 -
poj 3990 Fermat Point in Quadrangle / hdu 3694
// 求四边形费马点,一开始想到的是用模拟退火, 写的不好, WA了两次, 只好去看了一下四边形费马点的规律//对于三角形:当三个角都小于120度,则费马点在三角形内部与任意两定点的连线构成的角都为120度;//若存在一个角大于等于120度,则费马点为此角顶点。//对于平面四边形:若为凸四边形,则费马点为两对角线交点;对于凹四边形,为其凹顶点。//在不是凸四边形的情况下,只要枚举四原创 2011-07-29 15:54:44 · 850 阅读 · 0 评论 -
hdu 4404 Worms (2012金华网络赛E题)
多边形与圆的相交面积,把多边形分解成三角形处理,模版题。特殊注意:正余弦反三角函数里的参数为+1、-1的时候会出错,把它们都乘上(1-EP)就可以了。 #include#include#include#includeusing namespace std;const double Pi=acos(-1.0);const double EP=1e-10;struct Poi原创 2012-09-22 17:07:14 · 3225 阅读 · 2 评论 -
UVA 10153 - New Horizons WA20次 下面是WA代码
The ProblemYertle has determined that the number of objects he can see, and hence rule, depends on the height of his throne. Your task, as原创 2011-08-15 16:38:51 · 792 阅读 · 0 评论 -
hdu 4033 /成都网络赛 Regular Polygon
//通过两个面积公式相等二分求解边长//一开始没有预处理上下界,而且粗心写错公式,调试了半天,但神奇的1A了。不过还是觉得代码有bug。#include #include #include #include #include #include us原创 2011-09-13 21:20:20 · 791 阅读 · 0 评论 -
poj 3808 Malfatti Circles
//纯粹的几何公式推导 #include#include#includeusing namespace std;struct Point{double x, y;}A, B, C, I;double dist(Point p1, Point p2){原创 2011-08-12 15:45:03 · 1391 阅读 · 0 评论 -
poj 2074 Line of Sight
//主要思想,遍历每一个障碍,求出它在property line上挡住的范围cover[i],然后线性扫描这些cover,找出最大值。#include#include#include#includeusing namespace std;const double EP=1e-8;struct Point{double x, y;}p;struct Line{double a, b, c;}pl;struct Segline{Point s, e;}sg,cover[1002],house,pline;Lin原创 2011-06-01 21:34:00 · 535 阅读 · 0 评论 -
POJ 1873 The Fortified Forest
//World Final的水题,由于数据很小,我用的位运算枚举凸包。#include #include #include #include #include using namespace std; const int INF=1e8; const double EP=1e-8; struct Point{int x, y, v, len;}p[16],pp[16]; struct plan{ int value, num, treeid; double wood; }ans, tmp; double x原创 2011-06-02 16:30:00 · 476 阅读 · 0 评论 -
POJ计算几何
计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板很重要,模板必须高度可靠。3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面大部分是模板。如果代码一片混乱,那么会严重影响做题正确率。4.注意精度控制。5.能用整数的地方尽量用整数,要想到扩大数据的方法(扩大一倍,或扩大sqrt2)。因为整数不用考虑浮点误差,而且运算比浮点快。一。点,线,面,形基本关系,点积叉积的理解POJ 2318 TOYS(推荐)http:/原创 2011-06-02 21:33:00 · 2208 阅读 · 0 评论 -
poj 2165 Gunman
//将三维坐标系转化为两个二维坐标系判断,分别x-z,z-y坐标系,相当于俯视图和左视图。//若直线与Window相交,则在左视图和俯视图上必相交。#include#include#includeusing namespace std;const double EP=1e-8;struct Point{double x, y, z;};struct Rect{Point lp, rp;}r原创 2011-06-07 21:45:00 · 720 阅读 · 1 评论 -
poj 1263 反射问题
//题意:一条射线在n个圆间反射,求依次经过哪些圆。//用了一些自己写的简单的函数,这道题要注意第11个圆也得判断。#include#include#include#includeusing namespace std;const double EP=1e-8;const double INF=1e9;struct Point{double x, y;};struct Circle{Poi原创 2011-06-08 16:45:00 · 674 阅读 · 0 评论 -
poj 2079 Triangle
//题意:在点集中求构成三角形的最大面积。//思路:面积最大的三角形的顶点必然在凸包上(证明略),然后对凸包取三个点i, j, k进行旋转卡壳。#include#include#include#includeusing namespace std;st原创 2011-07-31 12:42:02 · 537 阅读 · 0 评论 -
POJ 1673 EXOCENTER OF A TRIANGLE
//作图证明其实就是求三角形垂心#include#include#includeusing namespace std;const double EP=1e-8;struct Point{double x, y;};struct Line{ do原创 2011-07-12 00:43:56 · 340 阅读 · 0 评论 -
POJ 1819 Disks
//计算几何的模拟题,有trick,和恶心,注意最后的圆#include#include#include#includeusing namespace std;const double EP=1e-10;int main(){ //freopen原创 2011-07-12 00:33:52 · 666 阅读 · 0 评论 -
POJ 1279 Art Gallery
//求多边形内核的面积 #include#include#includeusing namespace std;const double EP=1e-8;struct Point{ double x, y; Point(){} Point(double a, double b):原创 2011-07-12 00:16:04 · 423 阅读 · 0 评论 -
poj 2546 Circular Area
//求两圆公共部分面积, 三种情况:相交、相离、相容#include#include#includeusing namespace std;const double Pi=acos(-1.0);const double EP=1e-8;struct P原创 2011-08-10 15:53:22 · 394 阅读 · 0 评论 -
Poj 3819 // Hdu 3425 Coverage
//题意:求n个圆覆盖一条线段的百分比//一开始没有处理0个圆相交的提前结束, 结果WA了无数次。。 #include#include#include#includeusing namespace std;struct Point{double x,原创 2011-08-13 10:19:04 · 888 阅读 · 0 评论 -
hdu 4410 Boomerang (2012杭州网络赛1001)
这题简直是个大坑,比赛时做了两个多小时,写了两百多行代码,各种调,就是没做出来。。。比完赛晚上十点多开始重写,写到半夜一点,终于过了!!! 思路:枚举所有情况,n=4一种,n=6一种,n=8四种。 先给组数据8 -3 9 0 9 0 0 9 0 9 -2 1 -2 1 -1 -3 -18 -3 9 0 9 0 0 9 0 9 -4 1 -4 1 -1 -3 -18 3原创 2012-09-24 01:11:09 · 2345 阅读 · 0 评论