题目

Description

你是一艘战列巡洋舰的引擎操作人员,这艘船的船员在空间中侦测到了一些无法辨识的异常信号。你的指挥官给你下达了命令,让你制定航线,驾驶战列巡洋舰到达那里。

船上老旧的曲速引擎的速度是0.1AU/s。然而,在太空中分布着许多殖民星域,这些星域可以被看成一个球。在星域的内部,你可以在任何地方任意次跳跃到星域内部的任意一个点,不花费任何时间。

你希望算出到达终点的最短时间。

Input

输入包含多组测试数据。

对于每一组数据,第一行包含一个正整数n,表示殖民星域的数量。

接下来n 行,第i 行包含四个整数Xi,Yi,Zi,Ri,表示第i个星域的中心坐标为(Xi, Yi,Zi),星域的半径是Ri。

接下来两行,第一行包含值Xa,Ya,Za,告诉你当前坐标为(Xa, Ya,Za)。

第二行包含值Xo,Yo,Zo,告诉你目的地坐标为(Xo, Yo,Zo)。

输入以一行单独的-1 结尾。所有坐标的单位都是天文单位(AU)。

Output

对于每一组输入数据,输出一行表示从目前的位置到达指定目的地的最短时间,取整到最近整数。输入保证取整是明确的。

Sample Input

1
20 20 20 1
0 0 0
0 0 10
1
5 0 0 4
0 0 0
10 0 0
-1

Sample Output

100
20

Data Constraint

每个输入文件至多包含10 个测试数据。

对于10% 的数据,n = 0。

对于30% 的数据,0<=n<=10。

对于100% 的数据,0<=n<=100,所有坐标的绝对值<=10000 ,半径r<=10000。

你可以认为,你所在的星区的大小为无限大。

分析

  • 首先我们考虑如何搞定一个三维的图
  • 将他搞成平面
  • 那我们就考虑如何跑最短路呢?
  • 星系之间的连边就是,原距离减去两个半径
  • 如果小于0
  • 那么距离就是0

代码

 1 #include<iostream>
 2 #include<queue>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<cstdio>
 6 using namespace std;
 7 struct sb
 8 {
 9     double x,y,z,r;
10 }a[201];
11 double map[201][201];
12 int n;
13 double calc(int i,int j)
14 {
15     long long a1=(a[i].x-a[j].x)*(a[i].x-a[j].x);
16     long long b1=(a[i].y-a[j].y)*(a[i].y-a[j].y);
17     long long c1=(a[i].z-a[j].z)*(a[i].z-a[j].z);
18     long long sum=a1+b1+c1;
19     double k=sqrt(sum);
20     if (k-a[i].r-a[j].r>0) return k-a[i].r-a[j].r;
21     else return 0;
22 }
23 int vis[201];
24 double dis[201];
25 void spfa()
26 {
27     queue<int> q;
28     for (int i=0;i<=n+1;i++) dis[i]=1000000000.0000;
29     memset(vis,0,sizeof(vis));
30     dis[0]=0; vis[0]=1; q.push(0);
31     while (!q.empty())
32     {
33         int x=q.front(); q.pop(); vis[x]=0;
34         for (int i=0;i<=n+1;i++)
35         {
36             if (map[x][i]>=0&&dis[i]>dis[x]+map[x][i])
37             {
38                 dis[i]=dis[x]+map[x][i];
39                 if (!vis[i])
40                 {
41                     q.push(i);
42                     vis[i]=1;
43                 }
44             }
45         }
46     }
47 }
48 int main ()
49 {
50 //    freopen("warp.in","r",stdin);
51 //    freopen("warp.out","w",stdout);
52     cin>>n;
53     while (n!=-1)
54     {
55         memset(map,0,sizeof(map));
56         memset(a,0,sizeof(a));
57         for (int i=1,x,y,z,r;i<=n;i++)
58             cin>>a[i].x>>a[i].y>>a[i].z>>a[i].r;
59         cin>>a[0].x>>a[0].y>>a[0].z;
60         cin>>a[n+1].x>>a[n+1].y>>a[n+1].z;
61         for (int i=0;i<=n+1;i++)
62            for (int j=i;j<=n+1;j++)
63             {
64                 if (i==j) map[i][j]=-1;
65                 else
66                 map[i][j]=map[j][i]=calc(i,j);
67             }
68         spfa();
69         cout<<round(dis[n+1]*10)<<endl;
70         cin>>n;
71     }
72 }

转载于:https://www.cnblogs.com/zjzjzj/p/11391129.html

JZOJ 3517. 空间航行相关推荐

  1. 2019中山纪念中学夏令营-Day21[JZOJ]

    2019中山纪念中学夏令营-Day21[JZOJ] 提高组(B组模拟赛)Team_B (由于本人太弱,并没有订正完题目) (题解大部分是从官方题解文件上摘来的) 日常膜拜大神:じやゆん蒟蒻 正文部分: ...

  2. 拥有微软Windows CE的实时系统

    介绍 Microsoft Windows CE 快速反应的嵌入式应用常常管理严格的时间反应.例如,制造过程控制,高速的数据采集设备,电讯交换设备,医用设备,空中"有线"控制,武器发 ...

  3. 2019.08.21【NOIP提高组】模拟 B 组 dfs、最小生成树+二分、dp+计算几何、floyed+dfs、spfa

    文章目录 0 最小比例(ratio) 1 软件公司(company) 2 空间航行(warp) 3 摧 毁 巴士站(bus) 0 最小比例(ratio) 图中共有N个点的完全图,每条边都有权值,每个点 ...

  4. HDU1290 献给杭电五十周年校庆的礼物 平面分割空间问题

    点击打开链接 献给杭电五十周年校庆的礼物 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  5. [jzoj NOIP2018模拟 11.01]

    很庆幸打了这场模拟赛,因为这一场爆零 好像上次纪中的某场比赛我也出现了同样的问题,光是计算时间复杂度而忘记了空间的限制.想必是比上次惨的,考场上就写了两题而这两题都因为MLE爆零了.而且我T2还码了7 ...

  6. 哈里森,史上最具空间价值的钟表匠

    原文地址:http://sztqb.sznews.com/html/2008-03/25/content_110854.htm 不久前,在"大师日历"栏目里,我们编发了<库克 ...

  7. SSLOJ 1459.空间简单度【扫描线】【线段树】

    ... 题意: 分析: 代码: 题意: 给出一棵树以及若干条边 给出一个定值kkk,求有多少条路径的空间简单度>k>k>k 而空间简单度的定义如下: 分析: 这道题和JZOJ(GMO ...

  8. 【赛博学】这才是元宇宙-三层空间-现实-经济-网络

    本文是<赛博空间学与赛博学>的第一章-[导论]的第一节(1.1). 赛博是Cyber音译,源于希腊文Kyber,原意为舵手.它的含义是舵手掌握着船航行的方向,因此有掌握者.控制者,也就是领 ...

  9. KingbaseES V8R6 集群运维案例 -- 磁盘空间问题导致集群故障

    某商业银行生产系统KingbaseES读写分离集群主库出现故障,导致集群主备发生切换.客户要求说明具体的原因. KingbaseES读写分离集群基本信息: KingbaseES集群信息   操作系统 ...

最新文章

  1. initialize方法与load方法比较
  2. ARM和NEON指令 very nice
  3. MySQL表名后接t_mysql表名忽略大小写
  4. 初识THINKPHP--关于路径的问题(xampp下的htdocs为根目录)
  5. matlab基于dct的图像压缩编码解码_基于深度学习的视频压缩方法简介
  6. 星辰数据空号检测API文档
  7. 成为嵌入式高手,少不了这100多个软硬件开源项目!
  8. RTKLIB源码之单点定位/相对定位后处理简化版—第一版
  9. Python 流媒体播放器(基于VLC)
  10. 有些人无缘再见,却一生想念
  11. 13步设计出一个ITSM系统
  12. 临别给《生活大爆炸》做个台词数据分析,你猜谢耳朵最爱说什么?
  13. AI智能语音电销机器人能高效取代繁杂的电话工作
  14. Linux命令:reboot
  15. c 与易语言程序间通信,易语言与三菱PLC通信-FX系列
  16. 如何将pdf转换成ppt演讲稿
  17. CSS的浮动以及清楚浮动的方法
  18. Yahoo!创始人:杨致远的故事
  19. 使用VS2015 VC++第一步 写一个hello world程序
  20. 1句话搞明白啥是码元、啥是比特率、啥是波特率

热门文章

  1. 【React教学】通用型DataTable组件——400行内
  2. Ceph Block Device块设备操作
  3. Android M(6.0) 权限相关
  4. JAVA中String类
  5. PowerShell 扩展工具第二波!
  6. Linux Virtual Server LVS Load Balancing
  7. 调用webserver时出现:请求因 HTTP 状态 401 失败: Unauthorized。
  8. 一个简单的GTK的例子程序
  9. Entity Framework 学习总结之三:架构组成介绍
  10. AJAX vs FLEX:执行,传送,解析JSON,HTML,XML,AFM格式效率比较.