UVA 1001 Say Cheese 奶酪里的老鼠(最短路,floyd)
题意:一只母老鼠想要找到她的公老鼠玩具(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)的更多相关文章
- UVA - 1001 Say Cheese(奶酪里的老鼠)(flod)
题意:无限大的奶酪里有n(0<=n<=100)个球形的洞.你的任务是帮助小老鼠A用最短的时间到达小老鼠O所在位置.奶酪里的移动速度为10秒一个单位,但是在洞里可以瞬间移动.洞和洞可以相交. ...
- UVa 1001 奶酪里的老鼠(Dijkstra或Floyd)
https://vjudge.net/problem/UVA-1001 题意:一个奶酪里有n个洞,老鼠在奶酪里的移动速度为10秒一个单位,但是在洞里可以瞬间移动.计算出老鼠从A点到达O点所需的最短时间 ...
- UVa 1001 Say Cheese【floyd】
题意:在一个三维的奶酪里面有n(n<=100)个洞,老鼠A想到达老鼠B的位置, 在洞里面可以瞬间移动,在洞外面的移动速度为10秒一个单位,求最短时间 看到n<=100,又是求最短时间,想到 ...
- UVA 1001 Say Cheese
题意: 一只母老鼠想要找到她的玩具,而玩具就丢在一个广阔的3维空间上某个点,而母老鼠在另一个点,她可以直接走到达玩具的位置,但是耗时是所走过的欧几里得距离*10s.还有一种方法,就是靠钻洞,洞是球形的 ...
- UVa 1001 Say Cheese (Dijkstra)
题意:给定一个三维空间的一些球和起始位置和结束位置,问你最短要花的时间是多少. 析:建图,所有的位置都建立图,边权就是距离,最小求一次最短路即可. 代码如下: #pragma comment(link ...
- uva 1001(最短路)
题意:在一个三维的奶酪里面有n(n<=100)个洞,老鼠A想到达老鼠B的位置,在洞里面可以瞬间移动,在洞外面的移动速度为10秒一个单位,求最短时间 题解:如果两个洞相交,那么d[i][j]=0: ...
- UVA 10673 扩展欧几里得
题意:给出x 和k,求解p和q使得等式x = p[x / k] + q [ x / k], 两个[x / k]分别为向下取整和向上取整 题解:扩展欧几里得 //meek///#include<b ...
- 紫书 习题 11-2 UVa 1001 (Floyd)
这道题只是在边上做一些文章. 这道题起点终点可以看成半径为0的洞, 我是直接加入了洞的数组. 边就是两点间的距离减去半径, 如果结果小于0的话, 距离就为0, 距离不能为负 然后我看到n只有100, ...
- 对偶图 && 【BZOJ】1001: [BeiJing2006]狼抓兔子(对偶图+最短路)
http://www.lydsy.com/JudgeOnline/problem.php?id=1001 可谓惨不忍睹,一下午就在调这题了. 很久以前看到这题是一眼最大流,看到n<=1000,我 ...
随机推荐
- BZOJ 1143: [CTSC2008]祭祀river 最大独立集
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1143 题解: 给你一个DAG,求最大的顶点集,使得任意两个顶点之间不可达. 把每个顶点v ...
- Unity3d 模型导入选项
- winform中的checkedListbox数据源绑定
首先看清楚一点 winform下该控件的名称叫做:checkedListbox webform下叫做CheckBoxList 不知道这样起名的用意何在,这个别管了,看看用法吧. web下很简单,直接设 ...
- .net中的认证(authentication)与授权(authorization)
“认证”与“授权”是几乎所有系统中都会涉及的概念,通俗点讲: 1.认证(authentication) 就是 "判断用户有没有登录?",好比windows系统,没登录就无法使用(不 ...
- POJ 3070 Fibonacci(矩阵快速幂)
题目链接 题意 : 用矩阵相乘求斐波那契数的后四位. 思路 :基本上纯矩阵快速幂. #include <iostream> #include <cstring> #includ ...
- 华为3C抢购难度
上周小米2S降价到1299买了一个,今天突然想体验一下抢购红米和3C的难度.万一抢到了,拿到手机市场贵100块钱卖掉,然后可以请女神吃个饭~~~哈哈哈哈! 结果确实不怎么好抢.刚刚试了一下3C: 验证 ...
- stringUtils是apache下的Java jar补充包
org.apache.commons.lang.StringUtils StringUtils中一共有130多个方法,并且都是static的, 所以我们可以这样调用StringUtils.xxx().
- amd(超微半导体公司(英语:Advanced Micro Devices, Inc.,缩写:AMD))
公司名称 AMD(超微半导体公司) 经营范围 CPU.显卡.主板等电脑硬件设备 AMD公司专门为计算机.通信和消费电子行业设计和制造各种创新的微处理器(CPU.GPU.APU.主板芯片组.电视卡芯 ...
- BCB一个问过100遍啊100遍的问题
一个问过100遍啊100遍的问题作者: ---------- ,如转载请保证本文档的完整性,并注明出处.欢迎光临 C++ Builder 研究, http://www.ccrun.com/doc/go ...
- Android:创建Android工程
创建Android工程,在Eclipse左栏右键 new->project.. (版本不一样,名字会有所区别) 然后选择Android下的Android application projec ...