计算几何
穷源溯流
路很长,尽管走便是。
展开
-
UVA 11168 Airport(凸包)
Sample Input440 00 11 01 1215035 3957234582 3953530 00 11 050 00 22 02 21 1Sample OutputCase #1: 0.500Case #2: 0.000Case #3: 0.236Case #4: 1.000原创 2020-11-25 08:47:42 · 187 阅读 · 0 评论 -
UVA10652 Board Wrapping(凸包)
Sample Input144 7.5 6 3 08 11.5 6 3 09.5 6 6 3 904.5 3 4.4721 2.2361 26.565Sample Output64.3 %原创 2020-11-24 16:51:08 · 183 阅读 · 0 评论 -
POJ 1113 && HDU 1348 Wall(凸包周长)
给出 n 个点,以及数 L,要求修一面城墙花费最少的资源,使得每个点到达城墙的距离全都大于 L求出这 n 各点所形成的凸包的周长+以 L 为半径的圆的周长即可const int N=1e4+5; int i,j,k; int n,m,t; struct Point { double x,y; Point(double x=0,double y=0):x(x),y(y){} }p[N],ch[N]; ...原创 2020-11-24 14:19:59 · 179 阅读 · 0 评论 -
POJ 3348 Cows(凸包面积)
const int N=1e4+5; int i,j,k; int n,m,t; struct Point { double x,y; Point(double x=0,double y=0):x(x),y(y){} }p[N],ch[N]; typedef Point Vector; Vector operator+(Vector a,Vector b){ return Vector(a.x-b.x,a.y-...原创 2020-11-24 13:51:04 · 209 阅读 · 0 评论 -
HDU 1756 Cupid‘s Arrow(转角法)
转角法判断点在多边形内部模板题const int N=1e3+5; int i,j,k; int n,m,t; struct Point { double x,y; Point(double x=0,double y=0):x(x),y(y){} }a[N],p;typedef Point Vector ;Vector operator-(Vector a,Vector b){ return Vector(a.x...原创 2020-11-23 08:47:24 · 215 阅读 · 0 评论 -
UVALive 3263 && POJ 2284 That Nice Euler Circuit (欧拉定理+计算几何)
给出 n 个点,将其连成一个回路,问这些线段将平面分成几部分根据欧拉定理,平面数 ans=边数-顶点数+2所以只需要利用计算机和基础计算顶点数和边数即可因为所连的线是由给定的顺序产生的,所以可以从前面按照顺序枚举,两两相邻的点作为一条边,判断是否产生交点由于可能产生多线共点的情况,再进行去重。最后判断每一个点再几条边上,这样线段内的一个点将一条线段分为两条线段const int N=300+5; int i,j,k; int n,m,t; ...原创 2020-11-22 11:54:06 · 167 阅读 · 0 评论 -
HDU 3756 && UVALive 4986 Dome of Circus Dome of Circus(计算几何基础+三分)
Sample Input11.00 0.00 1.0021.00 0.00 1.000.00 1.50 0.5031.00 0.00 1.000.00 1.50 0.50-0.50 -0.50 1.00Sample Output3.000 1.5002.000 2.0002.000 2.000原创 2020-11-18 10:20:10 · 146 阅读 · 0 评论 -
UVA12300 Smallest Regular Polygon(计算几何基础)
Sample Input0 0 1 1 41 2 3 4 52 3 4 5 60 0 0 0 0Sample Output1.0000005.2573115.196152给出两个点的坐标以及整数 n,求穿过这两个点的面积最小的正n边形要求面积最小,根据贪心这条边一定是最长的一条对角线将这个正 n 边形放到圆内,360 被分成了 n 分,每份记为 x°,我们只要知道这个圆的半径之后就可以求得这个 n 边形的面积n 为偶数的时候,就是这两点之间的距离的一半...原创 2020-11-18 08:09:04 · 208 阅读 · 0 评论 -
UVA11817 Tunnelling the Earth(计算几何基础)
Sample Input143.466667 -80.516667 30.058056 31.228889Sample Output802333输入两个点的经纬度,已知地球半径为 6 371 009 ,求这两点之间的弧长与直线距离的差不难想到要将所给点的经纬度转化成球上的坐标,剩下的按照常规求解,将这两个点看做成一个向量向量的长度为直线距离 = 向量自身的点积 再开平方 弧长=两点与坐标原点所形成向量的夹角*地球半径 struct Point ...原创 2020-11-16 19:05:59 · 251 阅读 · 0 评论 -
UVA11800 Determine the Shape(计算几何基础)
Sample Input60 02 02 20 20 03 03 20 20 08 45 03 40 02 03 21 20 05 04 31 30 05 04 31 4Sample OutputCase 1: SquareCase 2: RectangleCase 3: RhombusCase 4: ParallelogramCase 5: TrapeziumCase 6: Ordinary Quadrilateral给...原创 2020-11-16 18:24:27 · 222 阅读 · 0 评论 -
UVA11646 Athletics Track(计算几何基础)
Sample Input3 : 25 : 4Sample OutputCase 1: 117.1858168913 78.1238779275Case 2: 107.2909560477 85.8327648381有一个长为 400 米的跑道,给出跑道矩形的长和宽的比值,已知两边的圆弧(silced circle)是以矩形中点为圆心的圆弧,求长与宽的值如上图所示,我们可以由比例求得 r 的大小和的大小,由于 r 并不是真正的 r 的值,跑道的一半长度为 200,...原创 2020-11-15 17:53:12 · 348 阅读 · 0 评论 -
UVA11524 InCircle(计算几何基础)
Sample Input2140.950053649715.3010457320 550.3704847907464.9681681852 65.973737823055.0132446384 10.7791711946208.2835101182145.7725891419 8.82641764527.6610997600 436.1911036207483.6031801012 140.2797089713Sample Output400156.40759088...原创 2020-11-15 12:55:02 · 172 阅读 · 0 评论 -
UVA11437 Triangle Fun(计算几何基础)
23994.707 9251.677 4152.916 7157.810 5156.835 2551.9726903.233 3540.932 5171.382 3708.015 213.959 2519.85298099206144在三角形 ABC 中,D E F 分别是三边的三等分点,P Q R 三点构成了一个三角形,求这个三角形的面积 int i,j,k; int n,m,t; struct Point { dou...原创 2020-11-14 22:22:12 · 182 阅读 · 0 评论 -
UVA11186 Circum Triangle(计算几何基础)
现在有一个圆心坐标在 (0,0) 的圆,给出 n 个点的极角,再给出圆的半径 r可以证明任意在圆上的三个点是不共线的,所以求出任意三个点所围成的三角形的面积之和题目告诉了圆心的坐标和圆的半径,以及点的极角,所以很容易求得所有点的坐标,然后暴力枚举,利用向量的叉乘计算各个三角形的面积由于点的个数只有 500 ,所以 O(n^3) 的时间复杂度完全可以const double pi=acos(-1.0);const int N=500+5; int i,j,...原创 2020-11-14 16:44:50 · 215 阅读 · 0 评论 -
UVA10566 Crossed Ladders(计算几何+二分)
有两把梯子搭在墙上,给出这两把梯子的长度 x,y,以及他们的交点,交点的高度为 h,求这两个房屋之间的距离 double x,y,h;bool C(double aim){ double ans=1.0/sqrt(x*x-aim*aim)+1.0/sqrt(y*y-aim*aim); if(ans<1/h) return true; else return false;}int main(){ //IOS; while(~s...原创 2020-11-14 15:47:13 · 252 阅读 · 0 评论