题意:一只母老鼠想要找到她的公老鼠玩具(cqww?),而玩具就丢在一个广阔的3维空间(其实可以想象成平面)上某个点,而母老鼠在另一个点,她可以直接走到达玩具的位置,但是耗时是所走过的欧几里得距离*10s。还有一种方法,就是靠钻洞,洞是球的,而在洞内怎么走都是不耗时间的。求母老鼠找到她的玩具所耗时?

思路:先要看清楚题意先!尽可能要找到洞,如果洞的半径越大,那么就可以越省时。如果老鼠和玩具都在同个洞上,那么不耗时即可找到。

  其实就是求单源最短路,只是计算两点间的长度时要考虑到半径的。而且得注意两洞相连的情况,那么在两洞之间切换不需要时间。输出注意要用round(double)。

下面是dijkstra实现,比较快:

 #include <bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
#define pdi pair<double,int>
#define INF 0x7f7f7f7f
using namespace std;
const int N=;
int x[N], y[N], z[N], r[N];
double dist[N][N];
double sdist[N];
int vis[N]; LL dijkstra(int n)
{
memset(vis,,sizeof(vis));
for(int i=; i<=n; i++) sdist[i]=1e29;
priority_queue<pdi,vector<pdi>,greater<pdi> > que;
que.push(make_pair(0.0, ));
sdist[]=0.0;
while(!que.empty())
{
int x=que.top().second;que.pop();
if(vis[x]) continue;
vis[x]=;
for(int i=; i<=n; i++)
{
if( sdist[i]>sdist[x]+dist[x][i] )
{
sdist[i]=sdist[x]+dist[x][i];
que.push(make_pair(sdist[i],i));
}
}
}
return round(sdist[n]*)+0.5;
} int main()
{
freopen("input.txt", "r", stdin);
int n;
int j=;
while(scanf("%d", &n), n>=)
{
memset(r,,sizeof(r));
for(int i=; i<=n; i++) scanf("%d %d %d %d",&x[i], &y[i], &z[i], &r[i]); scanf("%d %d %d",&x[],&y[],&z[]); //起点
scanf("%d %d %d",&x[n+],&y[n+],&z[n+]); //终点 //求两两之间的距离
for(int i=; i<=n+; i++)
{
for(int j=; j<=n+; j++)
{
dist[i][j]=0.0;
if(j!=i)
{
dist[i][j]=sqrt( pow(x[i]-x[j],)+pow(y[i]-y[j],)+pow(z[i]-z[j],) )-r[i]-r[j];
if(dist[i][j]<1e-) dist[i][j]=;
}
}
} printf("Cheese %d: Travel time = %lld sec\n", ++j, dijkstra(n+)); }
return ;
}

AC代码

下面是floyd实现,比较短:

 #include <bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
#define INF 0x7f7f7f7f
using namespace std;
const int N=;
int x[N], y[N], z[N], r[N];
double dist[N][N]; int main()
{
freopen("input.txt", "r", stdin);
int n;
int j=;
while(scanf("%d", &n), n>=)
{
memset(r,,sizeof(r));
for(int i=; i<=n; i++) scanf("%d %d %d %d",&x[i], &y[i], &z[i], &r[i]); scanf("%d %d %d",&x[],&y[],&z[]); //起点
scanf("%d %d %d",&x[n+],&y[n+],&z[n+]); //终点 //求两两之间的距离
for(int i=; i<=n+; i++)
{
for(int j=; j<=n+; j++)
{
dist[i][j]=0.0;
if(j!=i)
{
dist[i][j]=sqrt( pow(x[i]-x[j],)+pow(y[i]-y[j],)+pow(z[i]-z[j],) )-r[i]-r[j];
if(dist[i][j]<1e-) dist[i][j]=;
}
}
}
//floyd
for(int k=; k<=n+; k++)
for(int i=; i<=n+; i++)
for(int j=; j<=n+; j++)
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
printf("Cheese %d: Travel time = %lld sec\n", ++j, (LL)(round(dist[][n+]*)+0.5) ); }
return ;
}

AC代码

UVA 1001 Say Cheese 奶酪里的老鼠(最短路,floyd)的更多相关文章

  1. UVA - 1001 Say Cheese(奶酪里的老鼠)(flod)

    题意:无限大的奶酪里有n(0<=n<=100)个球形的洞.你的任务是帮助小老鼠A用最短的时间到达小老鼠O所在位置.奶酪里的移动速度为10秒一个单位,但是在洞里可以瞬间移动.洞和洞可以相交. ...

  2. UVa 1001 奶酪里的老鼠(Dijkstra或Floyd)

    https://vjudge.net/problem/UVA-1001 题意:一个奶酪里有n个洞,老鼠在奶酪里的移动速度为10秒一个单位,但是在洞里可以瞬间移动.计算出老鼠从A点到达O点所需的最短时间 ...

  3. UVa 1001 Say Cheese【floyd】

    题意:在一个三维的奶酪里面有n(n<=100)个洞,老鼠A想到达老鼠B的位置, 在洞里面可以瞬间移动,在洞外面的移动速度为10秒一个单位,求最短时间 看到n<=100,又是求最短时间,想到 ...

  4. UVA 1001 Say Cheese

    题意: 一只母老鼠想要找到她的玩具,而玩具就丢在一个广阔的3维空间上某个点,而母老鼠在另一个点,她可以直接走到达玩具的位置,但是耗时是所走过的欧几里得距离*10s.还有一种方法,就是靠钻洞,洞是球形的 ...

  5. UVa 1001 Say Cheese (Dijkstra)

    题意:给定一个三维空间的一些球和起始位置和结束位置,问你最短要花的时间是多少. 析:建图,所有的位置都建立图,边权就是距离,最小求一次最短路即可. 代码如下: #pragma comment(link ...

  6. uva 1001(最短路)

    题意:在一个三维的奶酪里面有n(n<=100)个洞,老鼠A想到达老鼠B的位置,在洞里面可以瞬间移动,在洞外面的移动速度为10秒一个单位,求最短时间 题解:如果两个洞相交,那么d[i][j]=0: ...

  7. UVA 10673 扩展欧几里得

    题意:给出x 和k,求解p和q使得等式x = p[x / k] + q [ x / k], 两个[x / k]分别为向下取整和向上取整 题解:扩展欧几里得 //meek///#include<b ...

  8. 紫书 习题 11-2 UVa 1001 (Floyd)

    这道题只是在边上做一些文章. 这道题起点终点可以看成半径为0的洞, 我是直接加入了洞的数组. 边就是两点间的距离减去半径, 如果结果小于0的话, 距离就为0, 距离不能为负 然后我看到n只有100, ...

  9. 对偶图 && 【BZOJ】1001: [BeiJing2006]狼抓兔子(对偶图+最短路)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 可谓惨不忍睹,一下午就在调这题了. 很久以前看到这题是一眼最大流,看到n<=1000,我 ...

随机推荐

  1. hibernate中文乱码问题

    在学习hibernate的过程中,发现在往mysql数据库中插入数据的时候会报错. <property name="hibernate.connection.url"> ...

  2. 【最小生成树】BZOJ 1196: [HNOI2006]公路修建问题

    1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1435  Solved: 810[Submit][Sta ...

  3. tangent space /handness

    normal tangent bitangent 三者互相垂直. 组成一个tangent space 表示一个点 对于原本位置的偏移(扰动) 考虑到这是为了 normalmap做出虚假的normal来 ...

  4. Emmet快速编写CSS样式

    基本的CSS样式编写时,很多样式只需输入首字母即可得到不带属性值的CSS样式,像上面说到的margin. 1.而对于一些带有特定的属性值的CSS样式,只需输入CSS标签与属性值的首字母就可以,比如: ...

  5. 01-08-04【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之命名缓存

    http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 可以在映射文件中定义命名查询,<query>元素提供了很多属性,可以用 ...

  6. 宏基5750G 不能用内置无线网卡上网

    宏基5750G 不能用内置无线网卡上网 具体体现在: 1.--> 搜索不到无线网络: 2.点击“打开网络和共享中心”-->没有“管理无线网络”一项.如果正常的话应该是这样的: 3.“我的电 ...

  7. Sqrt函数高效实现

    转自一个Sqrt函数引发的血案 我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来 ...

  8. 轻轻修改配置文件完成 OpenStack 监控

    当我们使用虚拟化云平台 OpenStack 时,必然要时时监控其虚拟机性能,随着近年企业级数据中心的不断发展,像混合虚拟化环境的业务需求也在持续增长中,因而也随之带来的监控需求更显重要,所以小编带来一 ...

  9. Android Drawable 关于selector中state_pressed="true"的位置顺序

    界面中有一个按钮使用这样的样式: <?xml version="1.0" encoding="utf-8"?> <selector xmlns ...

  10. floodlight make the VMs can not getDHCP IP address

    https://answers.launchpad.net/neutron/+question/242170 这个问题我也遇到了,但是没人回答. floodlight make the VMs can ...