hdu3124Arbiter(最小圆距离-扫描线)
详解http://blog.sina.com.cn/s/blog_6e7b12310100qnex.html
- #include <iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<stdlib.h>
- #include<vector>
- #include<cmath>
- #include<queue>
- #include<set>
- using namespace std;
- #define N 100000
- #define LL long long
- #define INF 0xfffffff
- const double eps = 1e-;
- const double pi = acos(-1.0);
- const double inf = ~0u>>;
- set<int>st;
- struct point
- {
- double x,y,r;
- point(double x = ,double y = ):x(x),y(y){}
- int id;
- }p[N],rank[N];
- struct line
- {
- double po;
- int id;
- }lef[N],rig[N];
- int rk[N],n,pp[N];
- double mid;
- typedef point pointt;
- point operator -(point a,point b)
- {
- return point(a.x-b.x,a.y-b.y);
- }
- int dcmp(double x)
- {
- if(fabs(x)<eps) return ;
- return x<?-:;
- }
- double dis(point a)
- {
- return sqrt(a.x*a.x+a.y*a.y*1.0);
- }
- int is_cross(int a,int b)
- {
- double dd = dis(rank[a]-rank[b]);
- if(dcmp(dd-rank[a].r-rank[b].r-mid-mid)>) return ;
- return ;
- }
- int judge(int a)
- {
- set<int>::iterator it=st.insert(a).first;//插入a后所在位置
- if(it!=st.begin())
- {
- if(is_cross(a,*--it))
- return ;
- it++;
- }
- if(++it!=st.end())
- {
- if(is_cross(a,*it)) return ;
- }
- return ;
- }
- int cal()
- {
- st.clear();
- int i = ,j = ;
- while(i<=n||j<=n)
- {
- if(j==n+||(i!=n+&&dcmp(lef[i].po-mid-(rig[j].po+mid))<=))//如果当且i圆的最左端小于j圆的最右端 将i插进来
- {
- int ip = rk[lef[i].id];
- if(judge(ip))
- return ;
- i++;
- }
- else
- {
- st.erase(rk[rig[j].id]);
- j++;
- }
- }
- return ;
- }
- double solve()
- {
- double low = 0.0,high = dis(p[]-p[])-p[].r-p[].r;
- while(low+eps<high)//二分距离
- {
- mid = (high+low)/;
- if(cal())
- high = mid;
- else low = mid;
- }
- return high+low;
- }
- bool cmp(line a,line b)
- {
- return a.po<b.po;
- }
- bool cmpp(point a,point b)
- {
- if(a.y==b.y) return a.x<b.x;
- return a.y<b.y;
- }
- int main()
- {
- int t,i;
- cin>>t;
- while(t--)
- {
- scanf("%d",&n);
- for(i = ; i <=n ;i++)
- {
- scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].r);
- lef[i].po = p[i].x-p[i].r;//每个圆的最左端
- lef[i].id = i;
- rig[i].po = p[i].x+p[i].r;//每个圆的最右端
- rig[i].id = i;
- rank[i] = p[i];//按y坐标排序
- rank[i].id = i;
- }
- sort(lef+,lef+n+,cmp);
- sort(rig+,rig+n+,cmp);
- sort(rank+,rank+n+,cmpp);
- for(i = ; i <= n; i++)
- {
- rk[rank[i].id] = i;//每个圆按y坐标排序后位于第几
- }
- double ans = solve();
- printf("%.6f\n",ans);
- }
- return ;
- }
hdu3124Arbiter(最小圆距离-扫描线)的更多相关文章
- @codeforces - 793G@ Oleg and chess
目录 @description - translation@ @solution@ @part - 1@ @part - 2@ @part - 3@ @part - 4@ @accepted code ...
- CSS动效集锦,视觉魔法的碰撞与融合(三)
本文讲述的原理和相关demo 扇形DIV的使用——实现雷达扫描图 DIV环形布局—实现loading圈 动画的向量合成—实现抛物线动画 无限滚动动画—实现跑马灯效果 perspective和trans ...
- OJ题解记录计划
容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001 A+B Problem First AC: 2 ...
- BZOJ_3476_[Usaco2014 Mar]The Lazy Cow_扫描线+切比雪夫距离
BZOJ_3476_[Usaco2014 Mar]The Lazy Cow_扫描线+切比雪夫距离 Description It's a hot summer day, and Bessie the c ...
- BZOJ-3228 棋盘控制 线段树+扫描线+鬼畜毒瘤
3228: [Sdoi2008]棋盘控制 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 23 Solved: 9 [Submit][Status][D ...
- BZOJ-3225 立方体覆盖 线段树+扫描线+乱搞
看数据范围像是个暴力,而且理论复杂度似乎可行,然后被卡了两个点...然后来了个乱搞的线段树+扫描线.. 3225: [Sdoi2008]立方体覆盖 Time Limit: 2 Sec Memory L ...
- 线段树总结 (转载 里面有扫描线类 还有NotOnlySuccess线段树大神的地址)
转载自:http://blog.csdn.net/shiqi_614/article/details/8228102 之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnl ...
- 最小圆覆盖 hdu 3007
今天学习了一下最小圆覆盖, 看了一下午都没看懂, 晚上慢慢的摸索这代码,接合着别人的讲解, 画着图跟着代码一步一步的走着,竟然有些理解了. 最小圆覆盖: 给定n个点, 求出半径最小的圆可以把这些点全部 ...
- 【转换模型+扫描线】【UVA1398】Meteor
The famous Korean internet company nhn has provided an internet-based photo service which allows The ...
随机推荐
- shell基础二十篇 一些笔记
shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...
- java 面试每日一题4
题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. publ ...
- 进程外session
进程外session A SqlServer 1.管理员身份运行cmd 2.更换目录 cd c:\Windows\Microsoft.NET\Framework\v4.0.30319> 3. ...
- weblogic远程调试
修改 bin/startWebLogic.cmd 增加红字部分,其中9999是调试监听端口,然后可以连接这个端口进行远程调试 set JAVA_DEBUG=-Xdebug -Xnoagent -Xru ...
- js笔记---封装一般运动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Visual Studio + SqlServer
vs2010: http://pan.baidu.com/s/1eQrlUwU sqlServer2008: http://pan.baidu.com/s/1sjQbyk1
- c#中委托和事件(续)(转)
本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器.异常处理.超时处理和异步方法调用等内容. 为什么要使用事件而不是委托变量? 在 C#中的委托和事件 中,我提出了两个为 ...
- Javascript中setTimeout()的用法详解
1.SetTimeOut() 1.1 SetTimeOut()语法例子 1.2 用SetTimeOut()执行Function 1.3 SetTimeout()语法 ...
- acdream 1148 GCD SUM 莫比乌斯反演 ansx,ansy
GCD SUM Time Limit: 8000/4000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatis ...
- jquery uploadify上传插件兼容火狐问题
jquery uploadify长传插件兼容火狐问题.因为现在火狐以不在默认安装flash插件.所以uploadify的flash版就需要安装flash插件.还可以成功. 可以到哪里下载安装:http ...