【DFS】Paintball(6-22)
[UVA11853]Paintball
算法入门经典第6章6-22(P175)
题目大意:有一个1000*1000的正方形战场,西南角坐标(0,0),西北角坐标(0,1000),有n个敌人,每个敌人处在(xi,yi),攻击范围为ri,要避开他们的攻击范围,求从最左边出发的最北边出发点及右边的最北边到达点。
试题分析:我们先判断是否能有方案,如何判断?将相交圆的圆心相连,看从交上边界的圆出发是否能到达与下边界相交的圆。然后再这个过程中如果看到与左/右边界相交的圆那么更新答案就好了。
- #include<iostream>
- #include<cstring>
- #include<cstdio>
- #include<vector>
- #include<cmath>
- #include<queue>
- #include<stack>
- #include<algorithm>
- using namespace std;
- inline int read(){
- int x=0,f=1;char c=getchar();
- for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
- for(;isdigit(c);c=getchar()) x=x*10+c-'0';
- return x*f;
- }
- const int MAXN=2001;
- const int INF=999999;
- int N,M;
- vector<int> vec[MAXN];
- struct data{
- double x,y,r;
- }cir[MAXN];
- bool vis[MAXN];
- double ansl,ansr;
- bool flag=false;
- double dis(int a,int b){
- double x=cir[a].x-cir[b].x;
- double y=cir[a].y-cir[b].y;
- return sqrt(x*x+y*y);
- }
- bool DFS(int x){
- if(vis[x]||flag) return false;
- vis[x]=true;
- if(cir[x].x-cir[x].r<=0){
- flag=true;
- return true;
- }
- if (cir[x].y<=cir[x].r) ansl=min(ansl,cir[x].x-sqrt(cir[x].r*cir[x].r-cir[x].y*cir[x].y));
- if (cir[x].y+cir[x].r>=1000) {
- double k=1000-cir[x].y;
- ansr=min(ansr,cir[x].x-sqrt(cir[x].r*cir[x].r-k*k));
- }
- for(int i=0;i<vec[x].size();i++) DFS(vec[x][i]);
- return false;
- }
- int main(){
- while(scanf("%d",&N)!=EOF){
- for(int i=1;i<=N;i++) vec[i].clear();
- ansl=ansr=1000.0; flag=false;
- for(int i=1;i<=N;i++){
- scanf("%lf",&cir[i].y);
- scanf("%lf",&cir[i].x);
- scanf("%lf",&cir[i].r);
- }
- for(int i=1;i<N;i++){
- for(int j=i+1;j<=N;j++){
- if(dis(i,j)<=cir[i].r+cir[j].r){
- vec[i].push_back(j);
- vec[j].push_back(i);
- }
- }
- }
- memset(vis,false,sizeof(vis));
- for(int i=1;i<=N;i++)
- if(cir[i].r+cir[i].x>=1000)
- if(DFS(i)) break;
- if(flag) printf("IMPOSSIBLE\n");
- else printf("%.2f %.2f %.2f %.2f\n",0.0,ansl,1000.0,ansr);
- }
- }
【DFS】Paintball(6-22)的更多相关文章
- 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...
- Kattis - glitchbot 【DFS】
Kattis - glitchbot [DFS] 题意 有一个机器人 刚开始在(0, 0),然后给出一个目标点,并且会给出一系列指令,但是其中会有一个指令是错误的.我们需要找出那个指令,并且改成正确的 ...
- HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))
度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 【dfs】P1331 海战
题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...
- 【dfs】p1731 生日蛋糕
1441:[例题2]生日蛋搞 [题目描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.设从下往上数第i(1≤i≤M)层蛋糕是半径为Ri, 高 ...
- 【dfs】LETTERS
1212:LETTERS [题目描述] 给出一个roe×colroe×col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母.问最多可以经过几个字母. [ ...
- 洛谷P1605 迷宫【dfs】
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- 【dfs】BZOJ1703-[Usaco2007 Mar]Ranking the Cows 奶牛排名
[题目大意] 农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序,约翰已经比较了M(1≤M≤10000)对奶牛的产奶率,但他 ...
- 【DFS】BZOJ3522-[Poi2014]Hotel
[题目大意] 给出一棵树,求三个节点使得它们两两之间的距离相等,问共有多少种可能性? [思路] 显然,这三个节点是关于一个中心点对称地辐射出去的. 枚举中心点,往它的各个子树跑Dfs.tmp[i]表示 ...
随机推荐
- eCharts_基于eCharts开发的一个多图表页面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- MS16-032提权正确方法
原版MS16-032提权会Spawn一个System Shell出来,只能通过Remote Desktop获取.这里修改exploit,直接反弹Shell.注意MS16-032依赖 thread ha ...
- Python第三方库SnowNLP(Simplified Chinese Text Processing)快速入门与进阶
简介 github地址:https://github.com/isnowfy/snownlp SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的 ...
- mongodb 学习笔记--- 基础知识
1.mongodb的安装 (1) mac使用brew 安装就好 brew install mongodb (2) mkdir /data/db 作为mongodb默认的数据目录 并 sudo chow ...
- 设计模式之笔记--组合模式(Composite)
组合模式(Composite) 定义 组合模式(Composite),将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 组合模式有 ...
- UVA - 796
UVA- 796 /** 题意:给出一个图,然后看此图的存在的桥,并且输出是哪一个, 做法:Tarjan(不存在重边) **/ #include<iostream> #include< ...
- [PAT] 1140 Look-and-say Sequence(20 分)
1140 Look-and-say Sequence(20 分)Look-and-say sequence is a sequence of integers as the following: D, ...
- Django 项目CRM总结
0. 项目说明: 1. 销售自动分配客户资源: 给销售分配权重及承单数量,创建权重表,通过销售权重进行从大到小进行排序 以承单数循环添加到列表,承单数是多少列表添加就添加多少次 考虑到如果服务重启,或 ...
- vue利用watch侦听对象具体的属性 ~ 巧用计算属性computed做中间层
有时候需要侦听某个对象具体的属性,可以按下面案例进行: <template> <div> <input type="text" v-model=&qu ...
- cocos2djs ctor init onEnter的区别
cocos2d-html5 onEnter init ctor构造函数 ---js特有特性(和c++有点不一样 ctor 构造函数, new 一个对象的时候调用-----coco2d-js , 默认c ...