计算几何
文章平均质量分 61
二十一画生
嚶其鳴矣求其友聲
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ 计算几何入门题目推荐
其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中。之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专业,GIS)。以后若有机会,我会补充、完善这个列表。 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠。 3.要注意转载 2013-06-06 10:22:14 · 1028 阅读 · 0 评论 -
uva 1447 - Malfatti Circles
题意:给出一个三角形的3个顶点的坐标,求3个圆,使得每个圆和三角形的两条边以及另两个圆均相切,如图,输出这3个圆的半径。 #include #include #include #define sqr(a) ((a)*(a)) #define eps 1e-8 #define min(a,b) (a)<(b)?(a):(b) using namespace std; int sig(原创 2013-08-23 12:03:10 · 1660 阅读 · 2 评论 -
uva 1342 - That Nice Euler Circuit
题意:平面上有一个包含n个点的一笔画,图案是封闭的。线段可以相交,但不会部分重叠,如图,求平面被分成多少部分。 #include #include #include #define eps 1e-8 using namespace std; int sig(double a) { return (a>eps)-(aeps); } typedef struct point {原创 2013-08-26 19:52:13 · 987 阅读 · 0 评论 -
uva 11796 - Dog Distance
#include #include #include #define eps 1e-8 #define max(a,b) a>b?a:b using namespace std; int sig(double a) { return (a>eps)-(a<-eps); } typedef struct point { double x,y; point(double原创 2013-08-26 22:13:58 · 992 阅读 · 0 评论 -
uva 11437 - Triangle Fun
这是一道简单的计算几何; In the picture below you can see a triangle ABC. Point D, E and F divides the sides BC, CA and AB into ratio 1:2 respectively. That is CD=2BD, AE=2CE and BF=2AF. A, D; B, E and C, F ar原创 2013-08-17 20:35:20 · 1080 阅读 · 0 评论 -
uva 11646 - Athletics Track
题意:如图,体育场的跑道一圈是400米,其中弯道是两段半径相同的圆弧。已知矩形的长宽比例为a:b,求长和宽的具体数值。 注意:圆弧的圆心在纵轴线上! #include #include #include using namespace std; int main() { double i=1,a,b,w,k,thy,d; char c; while(cin>>a>>原创 2013-08-18 16:49:24 · 1034 阅读 · 0 评论 -
uva 11800 - Determine the Shape
题意:给定平面上4个点,没有3点共线;判断这4个点能组成怎样的四边形。 正方形:Square 矩形:Rectangle 菱形:Rhombus 平行四边形:Parallelogram 梯形:Trapezium 普通四边形:Ordinary Quadrilateral #include #include using namespace std; typedef struct poin原创 2013-08-17 21:40:55 · 1523 阅读 · 0 评论 -
uva 12165 - Triangle Hazard
#include #include #include using namespace std; typedef struct point { double x,y; point(double xx=0,double yy=0):x(xx),y(yy){} }vector; vector operator - (point a,point b) { return vect原创 2013-08-23 21:44:20 · 1581 阅读 · 0 评论 -
POJ 1113 Wall
#include #include using namespace std; const double PI=acos(-1.0); int n,l; typedef struct point { double x,y; point(double xx=0,double yy=0):x(xx),y(yy){} }vector; point p[1010],q[1010]; void sort1原创 2013-05-18 19:34:28 · 743 阅读 · 0 评论 -
hdu 1115 Lifting the Stone (求重心)
#include #include using namespace std; typedef struct point { double x,y; point(double x=0.0,double y=0.0):x(x),y(y){} }vector; point p[1000010],c; vector operator - (point a,point b) {return原创 2013-06-11 18:20:49 · 1309 阅读 · 0 评论 -
hdu 4007 Dave (2011年大连ACM网络赛)
题意:给定正方形的边长 r ,在平面内寻找正方形可以圈住的点的最大的个数。 分析:先对点排序,然后固定一条边,再平移另一条垂直边,得到点的个数,最后比较大小即可。 注意:不包含正方形倾斜的情况! // Time 125ms; Memory 240k#include #include #include using namespace std; struct point { int原创 2013-09-02 17:02:50 · 1400 阅读 · 0 评论 -
uva 11524 - InCircle (二分法)
题意:三角形ABC的内切圆把它的三边分别划分成 m1:n1,m2:n2 和 m3:n3 的比例。另外已知内切圆的半径 r ,求三角形ABC 的面积。 #include #include #include #include #define sqr(a) (a)*(a) #define eps 1e-12 #define min(a,b) a<b?a:b #def原创 2013-08-20 07:48:48 · 1250 阅读 · 0 评论 -
POJ 1873 The Fortified Forest
题意:是有n棵树,每棵的坐标,价值和长度已知,要砍掉若干根,用他们围住其他树,问损失价值最小的情况下又要长度足够围住其他树,砍掉哪些树。。 思路:先求要砍掉的哪些树,在求剩下的树求凸包,在判是否可行。(枚举+凸包) // Time 407ms; Memory 200K#include #include #include #inc原创 2013-07-25 07:59:18 · 1212 阅读 · 0 评论 -
hdu 4717 The Moving Points(三分法)
大致题意:给定 n 个起点的二维坐标和速度的大小和方向;问在哪一时刻所有两点间的最大距离最小。 // Time 78 ms; Memory 1316K #include #include #include #define maxn 50000 #define maxm 305 #define sqr(x) ((x)*(x)) #define eps 1e-5 using namespac原创 2013-09-21 11:42:05 · 1122 阅读 · 0 评论 -
hdu 4741 Save Labman No.004 [2013年杭州ACM网络赛]
// Time 234 ms; Memory 244 K #include #include #include using namespace std; typedef struct point { double x,y,z; point(double xx=0,double yy=0,double zz=0):x(xx),y(yy),z(zz){} }vector; vector op原创 2013-09-15 19:14:30 · 1344 阅读 · 0 评论 -
uva 11817 - Tunnelling the Earth
题意:从地球上的一个点到另一个点,求亮点的球面距离和直线距离之差。假定地球是正球体,半径为6371009米。 #include #include #define r 6371009 #define pi 2.0*asin(1.0) using namespace std; double ang(double lt1,double lt2,double lg1,double lg2) {原创 2013-08-18 17:38:53 · 1100 阅读 · 0 评论 -
hdu 1007 Quoit Design(分治法求最近点对)
大致题意:给N个点,求最近点对的距离 d ;输出:r = d/2。 // Time 2093 ms; Memory 1812 K #include #include #include #include #define eps 1e-8 #define maxn 100010 #define sqr(a) ((a)*(a)) using namespace std; int sig(do原创 2013-10-31 15:22:19 · 1131 阅读 · 0 评论 -
uva 11186 - Circum Triangle
题意:在一个圆上有 n (n 提示:枚举每一条边。 #include #include #include #include #define pi (2.0*asin(1.0)) using namespace std; int main() { int i,j,n; double s,r,rad[505]; while(cin>>n>>r && n+r) {原创 2013-08-21 20:33:28 · 1659 阅读 · 1 评论 -
uva 10566 - Crossed Ladders
题意:如图,已知 x,y,c,其中 c 是 x 和 y 的交点到地面的距离。求“?”的长度。 #include #include #include #define sqr(a) ((a)*(a)) #define eps 1e-8 using namespace std; int sig(double a) { return (a>eps)-(a<-eps); } i原创 2013-08-21 11:13:16 · 1195 阅读 · 0 评论 -
uva 12300 - Smallest Regular Polygon
题意:给定两个点A和B,求包含这两个点的面积最小的正 n(已知)边形。 #include #include #include #define pi 2.0*asin(1.0) #define sqr(a) ((a)*(a)) using namespace std; int main() { int n; double x1,x2,y1,y2,d,thy,s; whi原创 2013-08-20 17:42:41 · 1067 阅读 · 0 评论 -
POJ1039 Pipe
//Time 47ms,Memory 248k#include #include using namespace std; double d[22]; typedef struct point { double x,y; point(double x=0,double y=0):x(x),y(y){} }vector; point p[22]; double cross(vector a,v原创 2013-05-17 18:45:36 · 925 阅读 · 0 评论 -
hdu 1077 Catching Fish
#include #include #include #include #include using namespace std; const int MAXN=330; const double eps=1e-4; double p[MAXN][2]; double xx1,yy1,xx2,yy2; double dis(int i,int j) { return sqrt((p[i原创 2013-05-18 19:20:45 · 1197 阅读 · 3 评论 -
POJ 2031 Building a Space Station
大致题意: 就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通。如果两个球有重叠的部分则算为已连通,无需再搭桥。求搭建通路的最小费用(费用就是边权,就是两个球面之间的距离)。 #include #include using namespace std; int vis[105],n; double map[105][105],l; double dis(原创 2013-06-13 08:56:31 · 1259 阅读 · 9 评论 -
POJ 1410 Intersection
#include #include #include #include using namespace std; struct Point { double x,y; }; struct Segment { Point p1,p2; }; double cross(const Point& o,const Po原创 2013-05-18 19:43:40 · 695 阅读 · 0 评论 -
山东省2012年第三届省赛之Fruit Ninja II
//Time 0ms, Memory 568KB#include #include #include using namespace std; const double pi=2.0*asin(1.0); int main() { double a,b,h,v; int t,i=1; cin>>t; while(t--) { cin>>a>>原创 2013-05-18 21:25:25 · 896 阅读 · 0 评论 -
hdu 2036 改革春风吹满地
#include int main() { int i,n,x[100],y[100]; double s; while(scanf("%d",&n)==1 && n) { s=0.0; for(i=0;i<n;i++) scanf("%d%d",&x[i],&y[i]); for(i=1;i<原创 2013-06-07 13:57:34 · 897 阅读 · 0 评论 -
POJ 2187 Beauty Contest
旋转卡壳求最远点对; #include #include using namespace std; int n,k; double dt; typedef struct point { double x,y; point(double xx=0,double yy=0):x(xx),y(yy){} }vector; point p[50010],q[50010]; struct line原创 2013-06-05 21:40:30 · 768 阅读 · 0 评论 -
ZOJ 3608 Signal Detection
#include #include #include #include using namespace std; const double eps=1e-6; typedef struct point3 { double x,y,z; point3(double x=0,double y=0,double z=0):x(x),y(y),z(z){} }vector3; struct face原创 2013-06-01 19:41:46 · 1105 阅读 · 0 评论 -
POJ 3348 Cows
题目大意: 给你n棵树,可以用这n棵树围一个圈,然后在圈里面可以养牛,每个牛需要50平方米的空间,问最多可以养多少牛? 其实就是求一个凸包,计算凸包面积,然后除以50,然后就得到答案,直接上模板了。 凸包这一类型的题目差不多,可以作为模板使用,时间复杂度是NlogN。 //Time 32ms; Memory 568K#include #include using nam原创 2013-07-25 08:10:40 · 1147 阅读 · 0 评论 -
POJ 1654 Area
题意:从原点出发,沿着8个方向走,每次走1个点格或者根号2个点格的距离,最终回到原点,求围住的多边形面积。 分析:直接记录所经过的点,然后计算多边形面积。注意,不用先保存所有的点,然后计算面积,边走变算,不然会超内存。最多有1000000个点。 注意:精度问题,使用long long / // Time 94ms; Memory 1036K#include #原创 2013-07-25 08:16:22 · 1145 阅读 · 0 评论 -
POJ 1228 Grandpa's Estate
题目大意 grandfather给k一块凸包的土地,有钉子钉在凸包的边上,现在其中一些钉子掉掉了,判断K是否能根据剩下的钉子判断出原来这边凸包的土地,能输出YES 不能输出NO 思路 如果根据剩余的点作出的凸包上的每一条边除两边端点意外还有多余的点。那么就是YES, 注意: 有可能只有一条边,那么一定是NO; // Tim原创 2013-07-25 08:06:33 · 1411 阅读 · 0 评论 -
POJ 1265 Area (pick定理)
题目大意:已知机器人行走步数及每一步的坐标变化量,求机器人所走路径围成的多边形的面积、多边形边上和内部的点的数量。 思路:叉积求面积,pick定理求点。 pick定理:面积=内部点数+边上点数/2-1。// Time 0ms; Memory 236K#include #include #include using namespace std; struct point { int x,原创 2013-07-25 19:56:47 · 1096 阅读 · 0 评论 -
POJ 2954 Triangle (pick 定理)
题目大意:给出三个点的坐标,问在这三个点坐标里面的整数坐标点有多少个(不包含边上的) 匹克定理:I = (A-E) / 2 + 1; A: 表示多边形面积 I : 表示多边形内部的点的个数 E: 表示在多边形上的点的个数 // Time 0ms; Memory 164K#include #include #include using namespace std;原创 2013-07-25 20:36:25 · 1198 阅读 · 0 评论 -
uva 1473 - Dome of Circus
题意:给定 n 个空间中的点,任务是找一个底面在 z=0 平面上,中心在(0,0,0)的体积最小的圆锥,包含所有点。 #include #include #include #include #define pi (2.0*asin(1.0)) #define div(a) ((a)*(a)*(a)) #define eps 1e-6 using namespace std; const原创 2013-08-19 19:48:45 · 1066 阅读 · 0 评论 -
uva 11731 - Ex-circles
题意:已知三角形ABC的3条边长,求三角形ABC 的面积,以及阴影部分的总面积。 #include #include #include #define sqr(a) ((a)*(a)) #define pi 2.0*asin(1.0) using namespace std; type原创 2013-08-20 16:25:20 · 1185 阅读 · 0 评论 -
uva 12301 - An Angular Puzzle
题意:如图,已知角ACB, 角CAE, 角EAB, 角CBD, 角DBA (in degrees), 求角 DEA。 注意:在 Output 中,“If there is more than one solution, print "Multiple solutions"”这句话是迷惑你的,根本没有这种情况! #include #include #include #def原创 2013-08-20 22:17:07 · 1170 阅读 · 0 评论 -
hdu 4736 This Is The Job The Bear Finds(2013年成都ACM网络赛)
#include #include #include #include #define eps 1e-10 #define sqr(a) ((a)*(a)) #define pi (2.0*asin(1.0)) using namespace std; double ma[100010]; int sig(double a) { return (a>eps)-(a<-eps); } ty原创 2013-09-15 10:31:36 · 2154 阅读 · 0 评论
分享