关键词:
#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL> #define PLI pair<LL, int> #define PII pair<int, int> #define SZ(x) ((int)x.size()) #define ull unsigned long long using namespace std; const int N = 2e5 + 7; const int inf = 0x3f3f3f3f; const LL INF = 0x3f3f3f3f3f3f3f3f; const int mod = 1e9 + 7; const double eps = 1.1e-4; const double PI = acos(-1); struct Point double x, y; Point(double x = 0, double y = 0) : x(x), y(y) ; typedef Point Vector; int dcmp(double x) if(fabs(x) < eps) return 0; else return x < 0 ? -1 : 1; Point operator + (Vector A, Vector B) return Point(A.x + B.x, A.y + B.y); Point operator - (Vector A, Vector B) return Point(A.x - B.x, A.y - B.y); Point operator * (Vector A, double p) return Point(A.x * p, A.y * p); Point operator / (Vector A, double p) return Point(A.x / p, A.y / p); bool operator < (const Vector &A, const Vector &B) return A.y < B.y || (A.y == B.y && A.x < B.x); bool operator == (const Vector &A, const Point &B) return dcmp(A.x - B.x) == 0 && dcmp(A.y - B.y) == 0; double Dot(Vector A, Vector B) return A.x * B.x + A.y * B.y; double Length(Vector A) return sqrt(Dot(A, A)); double Angle(Vector A, Vector B) return acos(Dot(A, B) / Length(A) / Length(B)); double Cross(Vector A, Vector B) return A.x * B.y - A.y * B.x; double Area2(Point A, Point B, Point C) return Cross(B - A, C - A); Vector Rotate(Vector A, double rad) return Vector(A.x*cos(rad)-A.y*sin(rad), A.x*sin(rad)+A.y*cos(rad)); double dist(const Point& a, const Point &b) return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y)); int n; double r, R; Point p[N]; Point GetCircleCenter(Point A, Point B, Point C) Point o; double a1 = B.x-A.x, b1 = B.y-A.y, c1 = (a1*a1+b1*b1)/2; double a2 = C.x-A.x, b2 = C.y-A.y, c2 = (a2*a2+b2*b2)/2; double d = a1*b2-a2*b1; o.x=A.x+(c1*b2-c2*b1)/d; o.y=A.y+(a1*c2-a2*c1)/d; return o; void MinPointCoverByCircle(Point *p, int n, Point &o, double &r) random_shuffle(p, p+n); o = p[0], r = 0; for(int i = 1; i < n; i++) if(dist(p[i], o) > r + eps) o = p[i]; r = 0; for(int j = 0; j < i; j++) if(dist(p[j], o) > r + eps) o.x = (p[i].x+p[j].x)/2; o.y = (p[i].y+p[j].y)/2; r = dist(p[j], o); for(int k = 0; k < j; k++) if(dist(p[k], o) > r + eps) o = GetCircleCenter(p[i], p[j], p[k]); r = dist(p[i], o); int main() // freopen("robots.in", "r", stdin); int T; scanf("%d", &T); while(T--) scanf("%d%lf%lf", &n, &R, &r); n++; p[0] = Point(0, 0); for(int i = 1; i < n; i++) double x, y; scanf("%lf%lf", &x, &y); p[i] = p[i-1] + Point(x, y); sort(p, p+n); n = unique(p, p+n)-p; Point o; MinPointCoverByCircle(p, n, o, r); printf("%.12f %.12f ", -o.x, -o.y); return 0; /* */
bzoj2823:[ahoi2012]信号塔&&1336:[balkan2002]alien最小圆覆盖&&1337:最小圆覆盖(代码片段)
首先我写了个凸包就溜了这是最小圆覆盖问题,今晚学了一下先随机化点,一个个加入假设当前圆心为o,半径为r,加入的点为i若i不在圆里面,令圆心为i,半径为0再重新从1~i-1不停找j不在圆里面,令圆心为ij中点,直径为ij距... 查看详情
luogup1742最小圆覆盖(代码片段)
最小圆覆盖主要是我太菜了不会证明qwq,上面的博客讲的非常好。主要是存代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>usingnamespacestd;constintN=100009;constdoublee 查看详情
bzoj1337最小圆覆盖(代码片段)
bzoj1337最小圆覆盖补充一个求三角形外心的向量法.用了点积的几何意义,很实用.出处.使用随机增量法求.首先随机打乱顺序,然后三重循环,选择当前在圆外的点更新圆,分别按照(1/2/3)个点确定圆的方式更新即可.由于随机一个点不在... 查看详情
c案例:最小覆盖圆问题(代码片段)
文章目录一、提出任务-最小覆盖圆(一)描述(二)输入(三)输出(四)样例输入输出二、完成任务(一)编程思路(二)编写代码,实现功能(三)运行程序,查... 查看详情
c案例:最小覆盖圆问题(代码片段)
文章目录一、提出任务-最小覆盖圆(一)描述(二)输入(三)输出(四)样例输入输出二、完成任务(一)编程思路(二)编写代码,实现功能(三)运行程序,查... 查看详情
c案例:最小覆盖圆问题(代码片段)
文章目录一、提出任务-最小覆盖圆(一)描述(二)输入(三)输出(四)样例输入输出二、完成任务(一)编程思路(二)编写代码,实现功能(三)运行程序,查... 查看详情
覆盖点问题总结(代码片段)
1.最小的包围圆,将所有的点包围起来。(hdu3932)最小覆盖圆算法地址:http://soft.cs.tsinghua.edu.cn/blog/?q=node/1066问题的背景提出:考察固定在工作平台上的一直机械手,要捡起散落在不同位置的多个零件,并送到别的地方。那么,... 查看详情
java案例:最小覆盖圆问题
文章目录一、提出任务-最小覆盖圆(一)描述(二)输入(三)输出(四)样例输入输出二、完成任务(一)编程思路(二)编写代码,实现功能(三)运行程序,查看结果一、提出任务-最小覆盖圆(一)描述给出平面上N(N≤1... 查看详情
java案例:最小覆盖圆问题
文章目录一、提出任务-最小覆盖圆(一)描述(二)输入(三)输出(四)样例输入输出二、完成任务(一)编程思路(二)编写代码,实现功能(三)运行程序,查看结果一、提出任务-最小覆盖圆(一)描述给出平面上N(N≤1... 查看详情
java案例:最小覆盖圆问题
文章目录一、提出任务-最小覆盖圆(一)描述(二)输入(三)输出(四)样例输入输出二、完成任务(一)编程思路(二)编写代码,实现功能(三)运行程序,查看结果一、提出任务-最小覆盖圆(一)描述给出平面上N(N≤1... 查看详情
做题poi2011r1-plot——最小圆覆盖&倍增(代码片段)
...将其划分成不超过(m)段连续的区间,使得所有每个区间的最小圆覆盖的半径的最大值最小。输出这个最小化的最大值和方案(圆心)。(n,mleq10^5)显然要二分答案。然后,一个区间就是越长越好。首先,考虑最小圆覆盖(O(n))的随机... 查看详情
模板最小圆覆盖——bzoj1336(代码片段)
博客链接https://blog.csdn.net/commonc/article/details/52291822#include<bits/stdc++.h>usingnamespacestd;#defineN100005typedefdoubledb;constdbeps=1e-10;constdbpi=acos(-1);intsign(dbk)if(k>eps)return1;elseif(k<-eps)return-1;return0;intcmp(dbk1,dbk2)returnsign(k1-k2);intinmid(dbk1,dbk2,d... 查看详情
[balkan2002]alien最小圆覆盖(代码片段)
传送门期望(O(n))的神奇算法代码:#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>usingnamespacestd;voidread(int&x)charch;boolok;for(ok=0,ch=getchar();!isdigit(ch);ch=getchar())if(ch=='-')ok=1;for(x=0;isdigit(ch);x=x*10+ch-'0'... 查看详情
最小路径覆盖问题(代码片段)
嘟嘟嘟 这里就讲怎么做……因为为什么这么做以及证明我都不知道……首先,我们将原图的每一个点i都拆成i和i+n两个点。接着把所有i都和源点相连,边的容量为1,;把所有i+n都和汇点相连,容量也为1。然后对于原图中的一... 查看详情
最小路径覆盖(代码片段)
最小不可交路径覆盖 题目链接:https://www.luogu.org/problemnew/show/P2764 题解: 如何建模? 把每个点i拆成xi和yi两个点。若i与j间有边,就链接xi与yj,求两个集合的最大匹配。 证明: 我们可以把一开始的点每个点... 查看详情
p1742最小圆覆盖(代码片段)
(color#0066ff题目描述)给出N个点,让你画一个最小的包含所有点的圆。(color#0066ff输入格式)先给出点的个数N,2<=N<=100000,再给出坐标Xi,Yi.(-10000.0<=xi,yi<=10000.0)(color#0066ff输出格式)输出圆的半径,及圆心的坐标,保留10位小数(c... 查看详情
最小权顶点覆盖问题(代码片段)
最小权顶点覆盖问题键盘输入,控制台输出importjava.util.*;publicclassMainstaticintn,m;//顶点数和边数staticint[]w;//权值staticint[]cover_in=newint[10000];//是否覆盖staticint[][]connect=newint[10000][10000];//边的标记staticinttw=0,bestW=Integer.MAX... 查看详情
bzoj1185[hnoi2007]最小矩形覆盖:凸包+旋转卡壳(代码片段)
...意: 给出二维平面上的n个点,问你将所有点覆盖的最小矩形面积。 题解: 先找出凸包,然后旋转卡壳。 在旋转卡壳中有一个结论:最小覆盖矩形一定有一条边在凸包上。 所以先枚举矩形在凸包上的那条边(p... 查看详情