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 - 39. Combination Sum - Medium
leetcode - 39. Combination Sum - Medium descrition Given a set of candidate numbers (C) (without dup ...
- ASP.NET MVC下自定义错误页和展示错误页的几种方式
在网站运行中,错误是不可避免的,错误页的产生也是不可缺少的. 这几天看了博友的很多文章,自己想总结下我从中学到的和实际中配置的. 首先,需要知道产生错误页的来源,一种是我们的.NET平台抛出的,一种是 ...
- bzoj 3626: [LNOI2014]LCA
Description 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1.设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先.有q ...
- 《跟我学IDEA》五、快捷键(编码利器)
上一篇博文,我们学习了idea的一些模版配置,但是只有模版是不行的,一款编辑器如何能为我们灵活的使用,快捷键的功劳不用多说大家也明白.今天我们就来学习快捷键的配置以及一些常用的快捷键的介绍,为让家能更 ...
- (转) Linux中profile、bashrc、bash_profile之间的区别和联系
原文地址:http://blog.csdn.net/chenchong08/article/details/7833242 /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登 ...
- spring的基本使用
Spring的基本使用ioc,今天主要给大家说明了解决强耦合的联系,并且,注入的基本使用 Java里面的强耦合并且讲了spring是如何解决强耦合的第一种方式使用工厂模式,用的是反射,第二种方式是sp ...
- ubuntu更换阿里源
网上应该可以找到很多关于ubuntu源的设置方法,但是如果不搞清楚就随便设置的话,不仅不能起到应有的效果,还会由于一些问题导致apt不可用. 最正确的更换源的方法应该如系统提示的: ## a.) ad ...
- python的range()函数
range函数的三种用法:>>> range(1,5) # 代表从1到5(不包含5) [1, 2, 3, 4] >>> range(1,5,2) # 代表从1到5, ...
- JQuery基本语法(部分)
1.jQuery介绍 jQuery 是一个 JavaScript 函数库. jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 CSS 操作 HTML 事件函数 JavaScrip ...
- [Redis源码阅读]dict字典的实现
dict的用途 dict是一种用于保存键值对的抽象数据结构,在redis中使用非常广泛,比如数据库.哈希结构的底层. 当执行下面这个命令: > set msg "hello" ...