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 ...
随机推荐
- DjVu转PDF
作者:马健邮箱:stronghorse_mj@hotmail.com发布:2009.09.22更新:2012.06.11针对PdfToy的新进展,更新了相关内容. 1 引言2 理论3 实现 3. ...
- FlowLayoutPanel控件控制里面子控件换行
// 摘要: // 设置值,该值表示的流中断设置 System.Windows.Forms.FlowLayoutPanel 控件. // // 参数: // control: // 子控件. // / ...
- c++语言的学习笔记代码与笔记注释《函数部分》
具体的笔记以注释的形式写在代码内,每个知识点用函数的形式表现. #include <iostream>; #include<cmath> const double PI=3.1 ...
- Java—多线程实现PV效果
前言 还记得今年参加自学操作系统考试,最难分析的就是PV这部分,然而伟大的米老师却用一个放东西吃东西的小例子,把PV讲的栩栩如生,言简意赅.学J2SE时学到了线程部分,里面提到了线程同步,死锁问题等等 ...
- cheerio制作markDown索引目录
原文地址:cheerio制作markDown索引目录 制作目录索引这种东西当然是放在前端方便.选择放在后端一是为了了解Node后端生态,掌握更多后端技术:二是因为公司实行前后端分离的方式开发,睾贵的J ...
- SpringBoot Junit测试Controller
原文链接:https://blog.csdn.net/xiaolyuh123/article/details/73281522 import java.util.List; import org.sp ...
- P3272 [SCOI2011]地板
\(\color{#0066ff}{ 题目描述 }\) lxhgww的小名叫"小L",这是因为他总是很喜欢L型的东西.小L家的客厅是一个R*C的矩形,现在他想用L型的地板来铺满整个 ...
- CF796D Police Stations 思维
Inzane finally found Zane with a lot of money to spare, so they together decided to establish a coun ...
- [BOI2007]Sequence 序列问题 BZOJ1345
题目描述 对于一个给定的序列a1, …, an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用一个元素max(ai,ai+1)替代,这样得到一个比原来序列短的新序列.这一 ...
- 安装lombok
1. lombok的jar包路径 wangfei@DESKTOP-8AT8HRO MINGW64 /d/gradle-3.4.1/caches/modules-2/files-2.1/org.proj ...