
计算几何
lab104_yifan
这个作者很懒,什么都没留下…
展开
-
HDU 3264 Open-air shopping malls(二分+圆交)
HDU 3264 Open-air shopping malls题目链接题意:给定一些圆,求以一个圆的圆心为圆心,自己定一个半径,使得和其他所有圆交面积都大于该圆的一半,求这个半径的最小值思路:很显然的二分半径,判断方法就枚举一个圆心,然后和每个圆求圆交面积即可代码:#include #include #include #include using原创 2014-11-28 19:09:40 · 811 阅读 · 0 评论 -
POJ 1269 Intersecting Lines(计算几何)
给定两直线,判定相交,重合,或求出交点验模板的题目代码:#include #include #include #include using namespace std;struct Point { double x, y; Point() {} Point(double x, double y) { this->x = x;原创 2015-03-05 12:31:54 · 816 阅读 · 0 评论 -
ZOJ 2107 HDU 1007 Quoit Design(最近点对)
最近点对的裸题利用分治去搞搞即可代码:#include #include #include #include using namespace std;const int N = 100005;struct Point { double x, y; void read() { scanf("%lf%lf", &x, &y); }}原创 2015-03-16 20:45:23 · 680 阅读 · 0 评论 -
UVA 11524 - InCircle (计算几何)
这题推推公式就可以了先利用n1 = m2, n2 = m3,可以构造出所有边的比例关系然后海伦公式 p = (a + b + c) / 2 S = sqrt(p * (p - a) * (p - b) * (p - c));又有S = (a + b + c) / r / 2两式子联立,就可以求出各边长度,然后就可以求出面积代码:#include #include #in原创 2015-03-26 14:35:05 · 1084 阅读 · 0 评论 -
UVA 438 - The Circumference of the Circle(计算几何)
给三点,求外切圆周长代码:#include #include #include #include using namespace std;struct Point { double x, y; Point() {} Point(double x, double y) { this->x = x; this->y = y;原创 2015-03-26 15:52:38 · 989 阅读 · 0 评论 -
UVA 10347 - Medians(计算几何)
给定三条中线长,求三角形面积思路:copy一个别人的题解代码:#include #include #include #include using namespace std;double a, b, c;bool judge() { if (a + b > c && a + c > b && b + c > a) return true; re原创 2015-03-26 20:21:10 · 867 阅读 · 0 评论 -
POJ 2398 Toy Storage(计算几何)
和POJ2318一样的方法,都是利用叉积判断+二分,不过这题要先排序,还有输出的是,每个数量的格子数代码:#include #include #include using namespace std;const int N = 1005;int n, m, x1, y1, x2, y2;struct Point { int x, y; Point() {}原创 2015-03-16 13:54:58 · 719 阅读 · 0 评论 -
POJ 3714 Raid(最近点对)
最近点对加一个小变形,如果两种点的类型相同,距离直接当成INF即可代码:#include #include #include #include using namespace std;const int N = 200005;struct Point { double x, y; int tp; void read(int tp) {原创 2015-03-16 20:51:28 · 857 阅读 · 0 评论 -
UVA 10566 - Crossed Ladders(二分+计算几何)
这个很显然,交点高度和底边长度成反比例函数,可以用二分求解二分底边,在利用交点求出高度,判断即可代码:#include #include #include #include using namespace std;struct Point { double x, y; Point() {} Point(double x, double y) {原创 2015-03-26 21:58:24 · 752 阅读 · 0 评论 -
UVA 10522 - Height to Area(计算几何)
这题就海伦公式带进去就可以了。。要注意的是,这题的样例,是输入n次错误的输入才停止。。,输入的可能是负数。代码:#include #include #include #include using namespace std;const double eps = 1e-8;int t;double Ha, Hb, Hc;int dcmp(double x) {原创 2015-03-27 20:59:50 · 918 阅读 · 0 评论 -
UVA 12300 - Smallest Regular Polygon(计算几何)
思路:找对点最优,奇数情况下,半径要另外算大概这么一个图,偶数就是距离的一半,奇数的话,做一个正2N边形,那么半径就可以利用三角函数算出来了然后有了外切圆半径,就能算面积了,为sin(2pi / n) * r * r * n / 2代码:#include #include #include #include using namespace std;const d原创 2015-03-28 08:43:59 · 1003 阅读 · 0 评论 -
UVA 11186 - Circum Triangle(计算几何+容斥)
这题用n^2的算法能过,先任意枚举两点,和圆心组成的三角形求面积,这个面积可能会被加(n - 2)次,但是要注意,如果有3点是在同一侧,那么要减去,于是在枚举一遍,每次枚举一个点,然后枚举和这个点度数相差180以内的点,求面积,这个面积要减去2 * (j - i + 1)次代码:#include #include #include #include using namespace原创 2015-03-28 10:03:45 · 1308 阅读 · 0 评论 -
UVA 12301 - An Angular Puzzle(计算几何)
这题就设AB是1,然后正弦余弦定理去搞搞搞就可以了代码:#include #include #include #include using namespace std;const double PI = acos(-1.0);int a, b, c, d, e;double get(double x) { return x / 180.0 * PI;}in原创 2015-03-28 10:47:53 · 862 阅读 · 0 评论 -
UVA 11796 - Dog Distance(计算几何)
题意:给定两条狗的行走路线,一直两条狗同时出发同时到达,问路途中的最远和最近距离思路:把每一段路程,当成相对运动,这样就是一只狗静止,一只在动,最小值相当于求点到线段距离,最大值为点到线段两端距离代码:#include #include #include #include using namespace std;struct Point { double x, y;原创 2015-03-23 19:05:57 · 1007 阅读 · 0 评论 -
POJ 2826 An Easy Problem?!(计算几何)
基本就和网上题解一样的思路,把几种情况判掉blablabla。。就WA了。然后答案加个EPS就过了。显然这题没有写SPJ。。卡了精度代码:#include #include #include #include using namespace std;struct Point { double x, y; Point() {} Point(double原创 2015-04-10 14:25:31 · 846 阅读 · 0 评论 -
ZOJ 3871 Convex Hull(计数)
一个n边形的面积,可以三角剖分成n 个每个边和原点构成的三角形的有向面积这样每条边等于一个有向面积,那么问题转化成只要求每条边能作为几个凸包的边那么枚举一点O,这样对于任意一点X会有一条OX的边,而这条边构成凸包的数量,显然就是只能在和他夹角180度以内的边以内找,也就是有多少个点,就是2^num - 1(因为至少要有一个点)于是进行极角排序,双指针扫一遍就能得到所有答案代码:原创 2015-04-29 12:47:27 · 1874 阅读 · 0 评论 -
UVA 11646 - Athletics Track(计算几何)
这是一题推推公式就可以的题目假设L为X,然后就可以算出半径,然后根据余弦定理可以算出圆弧长度,然后就可以推出X,输出代码:#include #include #include #include using namespace std;double a, b;int main() { int cas = 0; while (~scanf("%lf : %l原创 2015-03-05 16:40:45 · 797 阅读 · 0 评论 -
POJ 3348 Cows(凸包+多边形面积)
先求出凸包,然后利用凸包求出面积,除以50就是答案代码:#include#include#includeusing namespace std;const int MAXN=10005;struct Point { double x, y; Point() {} Point(double x, double y) { this->x =原创 2015-03-05 13:13:19 · 841 阅读 · 0 评论 -
ZOJ 2675 Little Mammoth(计算几何)
求圆和矩形面积交还是三角剖分去做即可代码:#include#include#include#include#includeusing namespace std;const double eps = 1e-8;const double pi = acos(-1.0);int dcmp(double x){ if(x > eps) return 1;原创 2015-03-16 18:05:05 · 828 阅读 · 0 评论 -
广州现场赛D题Signal Interference(计算几何)
Signal Interference题目链接思路:推推公式就发现其实就是求一个圆和多边形面积的交代码:#include#include#include#include#includeconst double eps = 1e-8;const double pi = acos(-1.0);int dcmp(double x){ if(x原创 2014-12-03 14:03:17 · 1471 阅读 · 1 评论 -
UVA 11178 - Morley's Theorem(计算几何)
这是一道基础的计算几何,基本自己推推就能推出来了,基本思路就是根据3点,求出角度,就可以知道要旋转的角度,然后求出两个旋转后的向量求交点输出即可代码:#include #include #include #include using namespace std;struct Point { double x, y; Point() {} Point(do原创 2015-02-06 04:54:04 · 819 阅读 · 4 评论 -
UVA 1342 - That Nice Euler Circuit(计算几何+欧拉定理)
大白上的例题思路:首先要知道欧拉定理, 顶点数V,边数E,面数F,那么有V + F - E = 2那么剩下就是根据已有的图形,计算出有多少个顶点和多少条边,就能计算出面数了于是暴力计算几何搞搞即可代码:#include #include #include #include using namespace std;struct Point { double x原创 2015-02-06 23:14:56 · 687 阅读 · 0 评论 -
ZOJ 1450 HDU 3007 (最小圆覆盖)
首先这个圆边上必有至少两点,打乱数组,然后利用枚举,不断重新定义圆,找出最小的圆代码:#include #include #include #include using namespace std;const int N = 100005;const double eps = 1e-8;int n;struct Point { double x, y;原创 2015-03-19 09:17:28 · 986 阅读 · 0 评论 -
UVA 11817 (球面几何)
这题主要知道如何把经纬度转化为三维点坐标即可代码:#include #include #include #include using namespace std;const double PI = acos(-1.0);int t;double lat[2], lng[2];//角度转化为弧度double torad(double deg) { return原创 2015-03-25 21:11:15 · 820 阅读 · 0 评论 -
UVA 12304 - 2D Geometry 110 in 1!(计算几何)
这题真的是恶心到爆炸啊通过这题整理了下圆相关的计算几何模板(基本都是参考别人的)代码:#include #include #include #include #include using namespace std;struct Point { double x, y; Point() {} Point(double x, double y) {原创 2015-03-25 20:28:06 · 876 阅读 · 0 评论 -
POJ 3304 Segments(计算几何)
题意:给定一些线段,问能否找出一条直线,穿过所有线段思路:如果存在一条直线,那么必然有一条直线是过已有的两点,那么就枚举两点,然后去判断是否跟所有线段有交点即可代码:#include #include #include #include using namespace std;struct Point { double x, y; Point() {}原创 2015-03-19 11:33:10 · 793 阅读 · 0 评论 -
POJ 2954 Triangle(PICK定理)
求点阵上取3点组成的三角形内部的点数,利用PICK定理PICK定理:平面上以格子点为顶点的简单多边形的面积=边上的点数/2+内部的点数-1这样只要利用叉积求出三角形面积,在利用gcd求出边上点数,就可以计算了代码:#include #include #include using namespace std;struct Point { int x, y;原创 2015-03-04 12:17:04 · 532 阅读 · 0 评论 -
UVA 11437 - Triangle Fun(计算几何)
这题只要根据题目,利用向量把点一个个求出来计算面积即可不过据说有一种证明方法可以证明面积是1/7的原三角形代码:#include #include #include #include using namespace std;int t;struct Point { double x, y; Point() {} Point(double x, d原创 2015-03-05 15:28:49 · 731 阅读 · 0 评论 -
UVA 11800 - Determine the Shape(计算几何)
题意:给定四个点,判断形状思路:先求个凸包,就能把四个点排序,然后就是利用几何去判断,利用点积判垂直,利用叉积判平行还有这题有个坑啊,明明说好是没有点共线的,其实是有的,所以求凸包如果不是4个点,直接输出不规则四边形即可代码:#include #include #include#include#includeusing namespace std;const int原创 2015-03-05 16:09:43 · 807 阅读 · 0 评论 -
POJ 2318 TOYS(计算几何)
利用叉积判断点在线段左边还是右边,然后进行二分即可代码:#include #include #include using namespace std;const int N = 5005;int n, m, x1, y1, x2, y2;struct Point { int x, y; Point() {} Point(int x, int y)原创 2015-03-16 13:31:48 · 688 阅读 · 0 评论 -
POJ 1556 The Doors(计算几何+最短路)
这题就是,处理出没两个点,如果可以到达,就连一条边,判断可不可以到达,利用线段相交去判断即可,最后求个最短路即可代码:#include #include #include #include #include using namespace std;#include #include #include #include using namespace std;str原创 2015-03-19 21:35:36 · 962 阅读 · 0 评论 -
UVA 1473 - Dome of Circus(三分+计算几何)
这题先推下公式,很容易发现圆锥的体积和半径满足一个二次函数,所以可以用三分于是三分半径即可代码:#include #include #include #include using namespace std;const int N = 10005;const double PI = acos(-1.0);struct Point { double x, y,原创 2015-03-26 15:28:39 · 982 阅读 · 0 评论 -
POJ3675 Telescope(计算几何)
题意:求一个圆心在原点,半径r的圆和多边形的面积的交思路:利用三角剖分,这题主要就是验证下模板代码:#include#include#include#include#includeconst double eps = 1e-8;const double pi = acos(-1.0);int dcmp(double x){ if(x > eps) retur原创 2015-03-16 16:29:30 · 1210 阅读 · 0 评论 -
POJ 2986 A Triangle and a Circle(计算几何)
和POJ3675一样的题而且这题就只要三角形和圆的交了代码:#include#include#include#include#includeconst double eps = 1e-8;const double pi = acos(-1.0);int dcmp(double x){ if(x > eps) return 1; return x <原创 2015-03-16 17:36:48 · 1151 阅读 · 0 评论 -
SGU 120 Archipelago (计算几何)
就计算几何向量旋转什么的搞搞搞就OK了代码:#include #include #include #include using namespace std;const int N = 155;const double pi = acos(-1.0);int n, n1, n2;struct Point { double x, y; int id;原创 2015-05-02 01:55:10 · 687 阅读 · 0 评论