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 ...
随机推荐
- c语言文件分割与合并
一.综述 c语言操作文件通过文件指针FILE*,每个要操作的文件必须打开然后才能读写. 注意事项: @1分割与合并文件最好使用二进制模式即"rb"或"wb",这 ...
- java调优(一)
- springBoot系列教程04:mybatis及druid数据源的集成及查询缓存的使用
首先说下查询缓存:查询缓存就是相同的数据库查询请求在设定的时间间隔内仅查询一次数据库并保存到redis中,后续的请求只要在时间间隔内都直接从redis中获取,不再查询数据库,提高查询效率,降低服务器负 ...
- POI 导出导入工具类介绍
介绍: Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI ...
- python编辑器pydev安装
pydev实际上时eclipse的插件 1.安装eclipse(1)eclipse不需要安装,解压文件夹,点击eclipse.exe可使用 2.安装pydev (1) 解压pydev可看到featur ...
- IIFF(立即执行函数表达式)
立即执行函数表达式(Immediately-invoked function expression,IIFF) 在javascript(ES5)中,是没有块级作用域的概念的 for (var i = ...
- dubbo filter链构建过程
public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException { if (Consta ...
- Hibernate中关于HQL查询返回List<Object>数据的结果集问题
---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...
- Vue自己写组件——Demo详细步骤
公司近期发力,同时开了四五个大项目,并且都是用Vue来做的,我很荣幸的被分到了写项目公用模块的组,所以需要将公用的部分提取成组件的形式,供几个项目共同使用,下面详细讲一下写Vue组件的具体步骤. 一. ...
- 设计模式成长记(一) 抽象工厂模式(Abstract Factory)
目录 定义 UML类图 参与者 编写代码 特点 定义 提供一个创建一系列相关或相互依赖的对象的接口,而无需指定具体的类. 使用频率: UML类图 参与者 AbstractFactory:声明一个创建抽 ...