BZOJ 1337 计算几何 解题报告
来源:互联网 发布:危险品资格证考试软件 编辑:程序博客网 时间:2024/06/14 05:34
1337: 最小圆覆盖
Description
给出平面上N个点,N<=10^5.请求出一个半径最小的圆覆盖住所有的点
Input
第一行给出数字N,现在N行,每行两个实数x,y表示其坐标.
Output
输出最小半径,输出保留三位小数.
Sample Input
4
1 0
0 1
0 -1
-1 0
Sample Output
1.000
【解题报告】
似乎叫随机增量?
但没有加random_shuffle(p+1,p+n+1)也是4ms。
可能是数据太弱了吧。。。
代码如下:
/************************************************************** Problem: 1337 User: onepointo Language: C++ Result: Accepted Time:4 ms Memory:2384 kb****************************************************************/#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define N 100010struct Point{ double x,y; Point(double _ = .0,double __ = .0):x(_),y(__) {} Point operator +(const Point &a) {return Point(x+a.x,y+a.y);} Point operator -(const Point &a) {return Point(x-a.x,y-a.y);} Point operator *(double a) {return Point(x*a,y*a);} double operator * (const Point &a) {return x*a.x+y*a.y;} double operator ^ (const Point &a) {return x*a.y-y*a.x;}}p[N];struct Line{ Point p,v; Line(){} Line(Point _a,Point _b):p(_a),v(_b){}};struct Circle{ Point p;double R; Circle(){} Circle(Point _p,double _R):p(_p),R(_R){}}ans;double dis(Point a,Point b) {return sqrt((a-b)*(a-b));}bool in_cir(Point a,Circle b) {return dis(a,b.p)<=b.R;}Point get_intersection(Line &l1,Line &l2){ Point u=l1.p-l2.p; double tmp=(l2.v^u)/(l1.v^l2.v); return l1.p+l1.v*tmp; }Point rotate (Point a) {return Point(-a.y,a.x);}int n;int main(){// srand(19980402); scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%lf%lf",&p[i].x,&p[i].y);// random_shuffle(p+1,p+n+1); for(int i=1;i<=n;++i) { if(!in_cir(p[i],ans)) { ans.p=p[i]; for(int j=1;j<i;++j) { if(!in_cir(p[j],ans)) { ans.p=(p[i]+p[j])*0.5; ans.R=dis(p[i],p[j])*0.5; for(int k=1;k<j;k++) { if(!in_cir(p[k],ans)) { Line l1((p[i]+p[j])*0.5,rotate(p[i]-p[j])); Line l2((p[i]+p[k])*0.5,rotate(p[i]-p[k])); ans.p=get_intersection(l1,l2); ans.R=dis(ans.p,p[i]); } } } } } } printf("%.3f",ans.R);}
阅读全文
0 0
- BZOJ 1337 计算几何 解题报告
- BZOJ 1913 计算几何+排列组合 解题报告
- BZOJ 1356 计算几何 解题报告
- BZOJ 1502 计算几何+自适应Simpson积分 解题报告
- BZOJ 1822 计算几何+网络流+二分答案 解题报告
- BZOJ 1007 几何 解题报告
- hdu5563解题报告(计算几何)
- 解题报告-HDU 2892 (计算几何)
- poj 1927 计算几何 解题报告
- HDU 4798 计算几何 解题报告
- 【解题报告】 Ural 1348 简单的计算几何
- POJ 1654 Area计算几何(解题报告)
- ZOJ 1648 Circuit Board计算几何(解题报告)
- 杭电1086(计算几何)解题报告
- timus 1874. Football Goal URAL 解题报告 计算几何
- 【计算几何】地主 pascal 解题报告
- bzoj1337 最小圆覆盖 计算几何 解题报告
- CodeVS1298 凸包周长 解题报告【计算几何】【凸包】
- 剑指Offer面试题10[二进制中1的个数]
- HDU 4053 or ZOJ 3541 The Last Puzzle【区间dp】【经典题】
- ConcurrentLinkedQueue原理
- PAT a1036题解
- LeetCode: 204. Count Primes判断是否为素数的高效方法
- BZOJ 1337 计算几何 解题报告
- Github pull request流程
- java 枚举类
- 当前不会命中断点,源代码与原始版本不同
- java调用C# webservice接口使用axis报错
- elastic search plugin head install guids
- PAT a1037题解
- #ffffff为什么是白色
- 科班出身和培训上岗的程序员谁更牛?