Saving James Bond(dijk)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1245
Saving James Bond
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2608 Accepted Submission(s): 505
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×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 whether he could
escape.If he could,tell him the shortest length he has to jump and the
min-steps he has to jump for shortest length.
input consists of several test cases. Each case starts with a line
containing n <= 100, the number of crocodiles, and d > 0, the
distance that James could jump. Then one line follows for each
crocodile, containing the (x, y) location of the crocodile. Note that x
and y are both integers, and no two crocodiles are staying at the same
position.
each test case, if James can escape, output in one line the shortest
length he has to jump and the min-steps he has to jump for shortest
length. If it is impossible for James to escape that way, simply ouput
"can't be saved".
17 0
27 0
37 0
45 0
1 10
20 30
can't be saved
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define INF 0x1fffffff
#define N 110
struct Edge{
int to;
int next;
double v;
}edge[N*N]; struct point{
double x;
double y;
}p[N]; int head[N];
int m;
double fd(double x1, double y1, double x2 , double y2)
{
double tm = (x2-x1)*(x2-x1) +(y2-y1)*(y2-y1);
return sqrt(tm);
}
double dis[N];
int cnt[N];
int Enct;
bool vis[N];
void init()
{
Enct = ;
memset(head,-,sizeof(head));
memset(vis, , sizeof(vis));
for(int i = ;i < N ; i++){
dis[i] = INF;
cnt[i] = INF;
}
cnt[] = ;
dis[] = ;
}
void add(int from , int to , double v)
{
if(v>m) return ;
edge[Enct].to = to;
edge[Enct].v = v;
edge[Enct].next = head[from];
head[from] = Enct++;
edge[Enct].to = from;
edge[Enct].v = v;
edge[Enct].next = head[to];
head[to] = Enct++;
}
int n; void dijk()
{
for(int i = ;i < n ;i++)
{
//for(int j = 0; j < n; j++) printf("%.2lf ", dis[j]); puts("");
int Min = INF ;
int Minc = INF ;
int k = -;
for(int j = ; j < n ; j++)
{
if(!vis[j]&&dis[j]<=Min)
{
if(dis[j]<Min)
{
Min = dis[j];
k = j;
}
else if(dis[j]==Min&&cnt[j]<Minc)
{
Minc = cnt[j];
k = j;
}
}
}
//printf("%d \n",k);
if(Min == INF) return ;
vis[k] = ;
for( int j = head[k] ; j != - ; j = edge[j].next)
{
Edge e = edge[j];
if(!vis[e.to]&&(dis[k]+e.v)==dis[e.to]&&cnt[k]+<cnt[e.to])
{
cnt[e.to] = cnt[k]+;
}
if(!vis[e.to]&&dis[k]+e.v<dis[e.to])
{
cnt[e.to] = cnt[k]+;
dis[e.to] = dis[k]+e.v;
}
}
}
} int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
for(int i = ; i <= n ;i++)
{
double x, y;
scanf("%lf%lf",&x,&y);
p[i].x = x;
p[i].y = y;
double dd = -max(fabs(x), fabs(y));
if(dd <= m) add(i, n+, dd);
//if((x>=50-m&&x>y)||(x<=-(50-m)&&x<y)) add(i,n+1,(50-abs(x)));
//if((y>=50-m&&x<y)||(y<=-(50-m)&&x>y)) add(i,n+1,(50-abs(y)));
for(int j = ; j < i ; j++)
{
double flag = fd(p[i].x,p[i].y,p[j].x,p[j].y);
if(flag <= m) add(i,j,flag);
}
}
for(int i = ; i <= n; i++)
{
double tm = fd(p[i].x, p[i].y, , );
if(tm - 7.5 <= m) add(, i, tm - 7.5);
}
// for(int i = 0; i < n+2; i++)
// {
// printf("%d:", i);
//for(int j = head[i]; j != -1; j = edge[j].next) printf("(%d %.2lf) ", edge[j].to, edge[j].v);
// puts("");
// } n += ;
dijk();
if(dis[n-]==INF) puts("can't be saved");
else
printf("%.2f %d\n",dis[n-],cnt[n-]-);
}
return ;
}
Saving James Bond(dijk)的更多相关文章
- 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 ...
- Saving James Bond - Easy Version (MOOC)
06-图2 Saving James Bond - Easy Version (25 分) This time let us consider the situation in the movie & ...
- pat06-图4. Saving James Bond - Hard Version (30)
06-图4. Saving James Bond - Hard Version (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作 ...
- 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 ...
随机推荐
- [array] leetcode - 42. Trapping Rain Water - Hard
leetcode - 42. Trapping Rain Water - Hard descrition Given n non-negative integers representing an e ...
- c#$用法
为什么会出现$符号,c#6.0才出现的新特性 var s = string.Fromat("{0}+{1}={2}",12,23,12+23) 用起来必须输入string.From ...
- cp 命令详解
作用: cp 指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录下, 若同时指定多个文件或目录, 而最后的目的 ...
- Macaca环境搭建踩坑总结
1.使用命令 npm i macaca-android -g 安装一直不成功,使用Macaca doctor 一直没有显示出android C:\Users\ABC>npm i macaca- ...
- VS2010安装OpenGL
以下涉及到的所有资源都在这里: 链接:https://pan.baidu.com/s/1eSctT5K 密码:174s *我的VS2010的安装位置:D:\Program Files (x86)\M ...
- [转]Linux网络配置命令ifconfig输出信息解析
eth0 Link encap:Ethernet HWaddr 00:1e:4f:e9:c2:84 inet addr:128.224.163.153 Bcast:128.224.163 ...
- 在Eclipse中查看JDK源码的方法
遇到这个问题是因为想证明Vector中的get()方法是不是用synchronized关键字修饰的来保证线程安全的方法, 于是在Eclipse里面: Vector<Integer> vec ...
- golang map
Our friend Monk has been made teacher for the day today by his school professors . He is going to te ...
- HashMap分析之红黑树树化过程
概述 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型.随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例 ...
- 2018年1月 常用的linux命令
项目中经常用到的Linux命令 (注意:linux命令要小写哦!) (1).ls 显示当前目录下的文件 (2).vi vim 进入编辑器,可以选择你要编辑的文档,一般我们将项目打包成jar包来 ...