pat06-图4. Saving James Bond - Hard Version (30)
06-图4. Saving James Bond - Hard Version (30)
This time let us consider the situation in the movie "Live and Let Die" in which James Bond, the world's most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake filled with crocodiles. There he performed the most daring action to escape -- he jumped onto the head of the nearest crocodile! Before the animal realized what was happening, James jumped again onto the next big head... Finally he reached the bank before the last crocodile could bite him (actually the stunt man was caught by the big mouth and barely escaped with his extra thick boot).
Assume that the lake is a 100 by 100 square one. Assume that the center of the lake is at (0,0) and the northeast corner at (50,50). The central island is a disk centered at (0,0) with the diameter of 15. A number of crocodiles are in the lake at various positions. Given the coordinates of each crocodile and the distance that James could jump, you must tell him a shortest path to reach one of the banks. The length of a path is the number of jumps that James has to make.
Input Specification:
Each input file contains one test case. Each case starts with a line containing two positive integers N (<=100), the number of crocodiles, and D, the maximum distance that James could jump. Then N lines follow, each containing the (x, y) location of a crocodile. Note that no two crocodiles are staying at the same position.
Output Specification:
For each test case, if James can escape, output in one line the minimum number of jumps he must make. Then starting from the next line, output the position (x, y) of each crocodile on the path, each pair in one line, from the island to the bank. If it is impossible for James to escape that way, simply give him 0 as the number of jumps. If there are many shortest paths, just output the one with the minimum first jump, which is guaranteed to be unique.
Sample Input 1:
17 15
10 -21
10 21
-40 10
30 -50
20 40
35 10
0 -10
-25 22
40 -40
-30 30
-10 22
0 11
25 21
25 10
10 10
10 35
-30 10
Sample Output 1:
4
0 11
10 21
10 35
Sample Input 2:
4 13
-12 12
12 12
-12 -12
12 -12
Sample Output 2:
0
本题测试点5是从小岛范围内可以直接跳到岸边。
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<stack>
#include<cmath>
#include<string>
using namespace std;
#define R 7.5
struct point
{
int x,y,last;
bool vis;
point()
{
vis=false;
}
point(int num)
{
vis=false;
last=num;
}
};
point p[];
queue<int> q;
double getdis(int x1,int y1,int x2,int y2)
{
int x=x1-x2;
int y=y1-y2;
return sqrt(x*x+y*y);
}
int abs(int a)
{
return a>?a:-a;
}
int main()
{
//freopen("D:\\INPUT.txt","r",stdin);
int n,J;
scanf("%d %d",&n,&J);
int i,level=,last=-,tail;
for(i=; i<n; i++)
{
scanf("%d %d",&p[i].x,&p[i].y);
p[i].last=i;
}
if(R+J>=){//小岛内直接跳到岸边
printf("1\n");
return ;
}
for(i=; i<n; i++)
{
if(getdis(,,p[i].x,p[i].y)<=R){//无效点
p[i].vis=true;
continue;
}
if(R+J>=getdis(,,p[i].x,p[i].y))
{
q.push(i);
p[i].vis=true;
last=i;
if(abs(p[i].x)+J>=||abs(p[i].y)+J>=)
{
printf("2\n");
printf("%d %d\n",p[i].x,p[i].y);
return ;
}
}
}
if(last==-){//一开始就没有可以跳的点
printf("0\n");
return ;
}
int cur,firstj=J+,fitp,count=;
while(!q.empty())
{
cur=q.front();
q.pop();
for(i=; i<n; i++)
{
if(!p[i].vis&&J>=getdis(p[cur].x,p[cur].y,p[i].x,p[i].y))
{//没有入队并且符合要求
p[i].vis=true;
q.push(i);//入队
p[i].last=cur;
tail=i;
if(abs(p[i].x)+J>=||abs(p[i].y)+J>=)
{
int now=i;
while(p[now].last!=now){
now=p[now].last;
}
if(getdis(,,p[now].x,p[now].y)-R<firstj){
firstj=getdis(,,p[now].x,p[now].y)-R;
fitp=i;
count=level+;
}
}
}
}
if(cur==last){
level++;//向下一层进发
last=tail;
}
if(level==count){
break;
}
}
stack<int> s;
if(count)
{
count++;
while(p[fitp].last!=fitp)
{
s.push(fitp);
fitp=p[fitp].last;
}
s.push(fitp);
}
printf("%d\n",count);
while(!s.empty())
{
printf("%d %d\n",p[s.top()].x,p[s.top()].y);
s.pop();
}
return ;
}
pat06-图4. Saving James Bond - Hard Version (30)的更多相关文章
- PTA 07-图5 Saving James Bond - Hard Version (30分)
07-图5 Saving James Bond - Hard Version (30分) This time let us consider the situation in the movie ...
- 07-图5 Saving James Bond - Hard Version (30 分)
This time let us consider the situation in the movie "Live and Let Die" in which James Bon ...
- Saving James Bond - Easy Version (MOOC)
06-图2 Saving James Bond - Easy Version (25 分) This time let us consider the situation in the movie & ...
- pat05-图2. Saving James Bond - Easy Version (25)
05-图2. Saving James Bond - Easy Version (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作 ...
- Saving James Bond - Hard Version
07-图5 Saving James Bond - Hard Version(30 分) This time let us consider the situation in the movie &q ...
- Saving James Bond - Easy Version 原创 2017年11月23日 13:07:33
06-图2 Saving James Bond - Easy Version(25 分) This time let us consider the situation in the movie &q ...
- PAT Saving James Bond - Easy Version
Saving James Bond - Easy Version This time let us consider the situation in the movie "Live and ...
- 06-图2 Saving James Bond - Easy Version
题目来源:http://pta.patest.cn/pta/test/18/exam/4/question/625 This time let us consider the situation in ...
- PTA 06-图2 Saving James Bond - Easy Version (25分)
This time let us consider the situation in the movie "Live and Let Die" in which James Bon ...
随机推荐
- javascript javascript加载类似星座、血型的函数
javascript加载类似星座.血型的函数 //加载血型 function bloodtypelaod(constellation) { var obj = document.getElement ...
- 一看你就懂,超详细java中的ClassLoader详解(转)
转载地址 http://blog.csdn.net/briblue/article/details/54973413 目录(?)[-] Class文件的认识 你还记得java环境变量吗 J ...
- phonegap移动开发之jsonp协议
最近我一直在学习android开发.并且做了几个小软件,我会在百度网盘和二维码的形式分享出去!源码会分享到github上.下面我还是主要来说说jsonp协议吧.可能许多初学者会遇到许多跟我一样的问题. ...
- 一些优秀的Firefox扩展
AdBlock Plus 拦截广告. 在对付CSDN等垃圾网站时非常有用. Block Site 拦截你不想看的网站 没有知乎的一天真好... XStyle 设置自己喜欢的CSS样式(表示自己并不会用 ...
- kuangbin专题十六 KMP&&扩展KMP HDU3746 Cyclic Nacklace
CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, ...
- springboot整合dubbo注解方式
工程结构: 主pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- Centos6.8 yum安装LNMP
1.Centos6系统库中默认是没有nginx的rpn包的,所以我们需要先更新下rpm依赖库 (1):使用yum安装nginx,安装nginx库 rpm -Uvh http://nginx.org/p ...
- [PowerShell]template engine
今天讨论的是如何在Powershell里实现一个简单的Template Engine的功能. 假设模板文件的内容如下:template.tt hello $name welcome $company ...
- ZOJ-Little Sub and Pascal's Triangle(思维规律)
Little Sub is about to take a math exam at school. As he is very confident, he believes there is no ...
- Python数据分析之pandas学习(基础操作)
一.pandas数据结构介绍 在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame.Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其 ...