UVA
来源:互联网 发布:资本在线网络贷款 编辑:程序博客网 时间:2024/06/14 11:06
题目链接:
https://vjudge.net/contest/170743#problem/E
题目大意:
一个人要从
分析:
分析是否可行比较简单,从接触上边界的圆开始,dfs继续找所有与当前圆相交或者相切的圆,(内含理论上不必包含,但是这里包含并不影响正确性,而且代码逻辑更简单,所以没有特判),若发现接触下边界的圆,则说明不可能。
实际上这个过程用并查集也可以实现,设计一个up和down数组,表示该集合的最大坐标上界和下界,若两圆相交,则合并两圆的集合,最后
比较麻烦的是找出
代码:
#include<stdio.h>#include<algorithm>#include<iostream>#include<string.h>#include<math.h>using namespace std;typedef long long ll;double sqr(double x){ return x*x;}struct Point{ double x,y; Point(){} Point (double _x,double _y) { x = _x; y = _y; } void read() { scanf("%lf%lf",&x,&y); } double distance(Point a) { return hypot(x-a.x,y-a.y); }};struct Circle{ Point p; double r; Circle(){} Circle(double _x,double _y,double _r) { p = Point(_x,_y); r = _r; } void read() { p.read(); scanf("%lf",&r); } bool cross(Circle a) { double dis = p.distance(a.p); return dis<=r+a.r; }}c[1200];int n;int vis[1200];double a1,a2;bool dfs(int k){ //printf("now dfs(%d)\n",k); //cross left if (c[k].p.x<=c[k].r) { double t = sqrt(sqr(c[k].r)-sqr(c[k].p.x)); a1 = min(a1,c[k].p.y-t); } //cross right if (1000-c[k].p.x<=c[k].r) { double t = sqrt(sqr(c[k].r)-sqr(1000-c[k].p.x)); a2 = min(a2,c[k].p.y-t); } //cross bottom if (c[k].p.y<=c[k].r) return false; bool res = true; for (int i = 1 ; i <= n ; i ++) { if (!vis[i]&&c[k].cross(c[i])) { vis[i] = 1; if (!dfs(i)) { res = false; break; } } } return res;}int main(){ while (~scanf("%d",&n)) { memset(vis,0,sizeof(vis)); a1 = a2 = 1000.0; for (int i = 1 ; i <= n ; i ++) { c[i].read(); } int f = 1; for (int i = 1 ; i <= n ; i ++) { if (!vis[i]&&c[i].p.y+c[i].r>=1000.0) { vis[i] = 1; if (!dfs(i)) { printf("IMPOSSIBLE\n"); f = 0; break; } } } if (f) printf("%.2f %.2f %.2f %.2f\n",0.0,a1,1000.0,a2); } return 0;}
阅读全文
0 0
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- 数对之差的最大值
- 互联网应用架构师
- Why would I want to fitsSystemWindows?
- vb.net 如何在同一页面,添加相同的usercontrol
- 0716学习总结(运算符重载)
- UVA
- centos6.8安装docker,kong-dashboard并实现页面访问
- goaccess 在 Linux 中以交互方式实时查看Apache Web访问统计
- 从mybatis基本原理到第一条sql的实现
- Linux下解压tar命令详解
- 在TortoiseGit中用Beyond Compare4比较代码差异
- AngularJS
- 第一次技术面试
- 我所不知道的TCP Socket编程(一)-简介+创建套接字