题目大概意思是,在给定一个矩形内,给定n个圆(0n1000)是障碍物,让你找出一条路径从x=0到x=1000 。开始我想错了,后来看大佬的解释,才知道原来可以自上而下以圆来做DFS,意思就是先找和y=1000相切或相交的圆,然后再做DFS,搜索与它相交或相切的圆,如果圆和x=0相切或相交,可以利用y-r*r-x*x求出最上边那个点(画个图更容易理解)

同样x=1000也是这样求的。要注意的是必须要遍历完所有和y=1000相交或相切的点,因为之前如果没有到达最下面y=0,不代表下一个圆遍历不到y=0。遍历过的点不需要再遍历。

#include<iostream>
#include <string.h>
#include <algorithm>
#include<math.h>
using namespace std;
int n;
struct Node
{double x, y, r;
};
double wid = 1000.00;
Node Enemy[1010];
int vis[1010]; double start = 1000.00, endans = 1000.00;
bool dfs(int u)
{vis[u] = 1;if (Enemy[u].y - Enemy[u].r <= 0.0)return true;if(Enemy[u].x<=Enemy[u].r){start = min(Enemy[u].y-sqrt(Enemy[u].r*Enemy[u].r - Enemy[u].x*Enemy[u].x), start);}if(Enemy[u].x+Enemy[u].r>=wid){endans = min(Enemy[u].y-sqrt(Enemy[u].r*Enemy[u].r - (wid-Enemy[u].x)*(wid-Enemy[u].x)), endans);}for(int i=0;i<n;i++){if(!vis[i]&&(sqrt((Enemy[i].x-Enemy[u].x)*(Enemy[i].x-Enemy[u].x)+ (Enemy[i].y - Enemy[u].y)*(Enemy[i].y - Enemy[u].y))<=(Enemy[i].r+Enemy[u].r))){if(dfs(i))return true;}}return false;
}
int main()
{while(cin >> n){memset(vis, 0, sizeof(vis));memset(Enemy, 0, sizeof(Enemy));for(int i=0;i<n;i++){cin >> Enemy[i].x >> Enemy[i].y >> Enemy[i].r;}bool isflag = false;for(int i=0;i<n;i++){if(Enemy[i].y+Enemy[i].r>=wid){if(!vis[i]&&dfs(i)){cout << "IMPOSSIBLE" << endl;isflag = true;break;}}}if(!isflag)       printf("0.00 %.2lf 1000.00 %.2lf\n", start, endans);start = 1000.00; endans = 1000.00; }return 0;
}

UVa11853 Paintball相关推荐

  1. 《算法竞赛入门经典(第2版)》——学习记录

    前言:   这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录.   作为一只 ...

  2. [Usaco2007 Oct] Super Paintball超级弹珠

    Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 489  Solved: 384 [Submit][Status][Discuss] Descriptio ...

  3. poj——2771 Guardian of Decency

    poj--2771    Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5916   ...

  4. Show Attend and Tell的词表

    dataset_Flickr8k的词表 {'a': 1, 'black': 2, 'dog': 3, 'is': 4, 'running': 5, 'after': 6, 'white': 7, 'i ...

  5. Greedy is Good

    作者:supernova 出处:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=greedyAlg Joh ...

  6. 我的AI之路(55)--如何获取kinetics数据集和如何制作自己的kinetics数据集

    近来做行为动作识别,根据近两年的CVPR.ICCV.ECCV论文实验了一序列的动作识别方面的模型,很多都用到了kinetics数据集或者something-something数据集,但是后者的官网目前 ...

  7. 【数据集】Kinetics-600 dataset介绍

    最近在做行为识别,然后介绍一下目前种类多且数据量很大的行为数据集 Kinetics-600 dataset. 参考链接: activityNet:http://activity-net.org/cha ...

  8. 20条不该打破的设计规则

    在设计中,我们常被允许.鼓励打破设计规则,这时你至少需要知道这些规则,才能正确的打破它们. 本文列出了一些基本的规则和技巧,从字体.排版到色彩.样式,涵盖了大部分设计中常见的错误,帮助你在设计中避免它 ...

  9. 行为识别数据集 Kinetics

    文章目录 0. 前言 1. 数据集介绍 附录-分类目录 Kinetics-400 分类 Kinetics-600 分类 Kinetics-700 分类 0. 前言 行为识别中重要的benchmark, ...

最新文章

  1. 计算机二级中的html那道题,计算机等级考试题库:这10道二级C++语言试题是个坑,你居然不知道...
  2. Android中WIFI开发总结(一)
  3. 区块链预言机(1)初识API网关
  4. 【B站视频笔记】linux 进程间通信(ipc)信号(软中断信号)signal库函数、可靠信号和不可靠信号、信号集sigprocmask(信号掩码、信号递达Delivery、信号未决Pending)
  5. oracle 得到一个树,Related to Oracle SQL 关于树形数据的遍历
  6. Boost:变量类型boost :: any的单元测试
  7. android P OTA差分升级时报错记录
  8. fanuc机器人自动程序前怎么回原点_FANUC机器人的执行程序
  9. c++语言的基本知识,C++基本知识总结
  10. C#添加二维码带加密带logo
  11. java openxml word_使用OpenXML操作Office文档
  12. 教你语音如何转换成文字的?
  13. 个人推荐一款并发测试工具
  14. 程序员坐行李箱迎寒风编码 2 小时,目击者:激励我写了一篇论文!
  15. android穿山甲主题冲突,Flutter 接头条穿山甲广告 Android 总述篇
  16. 抖音数据 - 网民评论数据采集,分析
  17. pip install -t的意思
  18. 3大能力升级,云效+钉钉,让研发协作更「敏捷」
  19. CTF入门指南(0基础)
  20. java文件后缀_关于java文件扩展名认识

热门文章

  1. SpringBoot-@Configuration
  2. 工作中用到的设计模式?
  3. 分库分表的类型和特点
  4. 运行过程中的leader选举
  5. 四大对象是什么时候创建的?
  6. SpringMVC的请求-文件上传-单文件上传的代码实现1
  7. SpringMVC的请求-获得请求参数-获得数组类型参数
  8. GraphQL入门之Schema和类型规范
  9. 静态static关键字修饰成员变量
  10. MySQL 1093 You can't specify target table for update in FROM c 的解决办法