New Game! (最短路+建图)
New Game!
https://www.nowcoder.com/acm/contest/201/L
题目描述
这个迷宫有一些特点。为了方便描述,我们对这个迷宫建立平面直角坐标系。迷宫中有两条平行直线 L1:Ax+By+C1=0, L2:Ax+By+C2=0,还有 n 个圆
Hifumi Takimoto想从 L1 出发,走到 L2 。请计算最少需要多少体力。
输入描述:
第一行五个正整数 n,A,B,C
1
,C
2
(1≤ n ≤ 1000, -10000 ≤ A,B,C
1
,C
2
≤ 10000),其中 A,B 不同时为 0。
接下来 n 行每行三个整数 x,y,r(-10000 ≤ x,y ≤ 10000, 1≤ r ≤ 10000) 表示一个圆心为 (x,y),半径为 r 的圆。
输出描述:
仅一行一个实数表示答案。与正确结果的绝对误差或者相对误差不超过 10
-4
即算正确。
输入
2 0 1 0 -4
0 1 1
1 3 1
输出
0.236068 可以把圆看成一个点,利用点到直线的距离公式和点到点的距离公式,求出各个点之间的距离,跑一遍最短路即可
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<stack>
#include<algorithm>
#include<cmath>
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
using namespace std; int n;
double A,B,C1,C2;
struct Circle{
double x,y,r;
}p[]; double map[][];
double vis[];
double dis[]; double dist1(Circle a,Circle b){
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y))-a.r-b.r;
} double dist2(double a,double b,double c,Circle d){
return (fabs(a*d.x+b*d.y+c)/sqrt(a*a+b*b)-d.r);
} void Dijstra(){
for(int i=;i<=n+;i++){
dis[i]=map[][i];
vis[i]=;
}
vis[]=;
dis[]=;
for(int i=;i<n+;i++){
double minn=INF;
int pos=;
for(int j=;j<=n+;j++){
if(!vis[j]&&dis[j]<minn){
minn=dis[j];
pos=j;
}
}
vis[pos]=;
for(int j=;j<=n+;j++){
if(!vis[j]&&dis[j]>minn+map[pos][j]){
dis[j]=minn+map[pos][j];
}
}
}
cout<<dis[n+]<<endl;
} int main(){
std::ios::sync_with_stdio(false);
cin>>n>>A>>B>>C1>>C2;
for(int i=;i<;i++){
for(int j=;j<;j++){
map[i][j]=INF;
}
}
for(int i=;i<=n+;i++){
cin>>p[i].x>>p[i].y>>p[i].r;
}
double tmp;
for(int i=;i<=n+;i++){
for(int j=i+;j<=n+;j++){
tmp=dist1(p[i],p[j]);
if(tmp>)
map[i][j]=map[j][i]=tmp;
else
map[i][j]=map[j][i]=;
}
}
for(int i=;i<=n+;i++){
tmp=dist2(A,B,C1,p[i]);
if(tmp>)
map[][i]=map[i][]=tmp;
else
map[][i]=map[i][]=;
tmp=dist2(A,B,C2,p[i]);
if(tmp>)
map[n+][i]=map[i][n+]=tmp;
else
map[n+][i]=map[i][n+]=;
}
map[][n+]=map[n+][]=fabs(C1-C2)/sqrt(A*A+B*B);
Dijstra(); }
New Game! (最短路+建图)的更多相关文章
- HDU 5521 [图论][最短路][建图灵感]
/* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...
- hdu4725 The Shortest Path in Nya Graph【最短路+建图】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html ---by 墨染之樱花 题目链接:http://acm.hdu ...
- Codeforces 938D. Buy a Ticket (最短路+建图)
<题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...
- HDU5521-最短路-建图
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 5294 Tricks Device 最短路建图+最小割
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...
- hdu 4725 The Shortest Path in Nya Graph (最短路+建图)
The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 第八届河南省赛C.最少换乘(最短路建图)
C.最少换乘 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 94 Solved: 25 [Submit][Status][Web Board] De ...
- 『The Captain 最短路建图优化』
The Captain(BZOJ 4152) Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小 ...
- HDU-4725.TheShortestPathinNyaGraph(最短路 + 建图)
本题思路:主要是建图比较麻烦,因为结点可以在层与层之间走动,也可以在边上进行走动,所以主要就是需要找到一个将结点和层统一化处理的方法. 所以我们就可以对于存在边的结点建边,层与层之间如果层数相差一也建 ...
- bzoj2662: [BeiJing wc2012]冻结 最短路 建图
好久没有1A题啦♪(^∇^*) 一个sb建图,我居然调样例调了10min 看起来是双向边,其实在建图的时候要当成有向图, 否则他会时间倒流(233) 把每个点裂成k个点,然后把每条边裂成4条边(正向反 ...
随机推荐
- R语言学习——欧拉计划(3)Largest prime factor 求最大质因数
The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 60085 ...
- xsl如何实现递归复制?
<xsl:template match="*" mode="addSeatSelectionToAirProduct"> <xsl:eleme ...
- iOS 基础
layoutSubviews: layoutSubviews是对sbuviews的重新布局,比如,我们想更新子视图的位置,可以通过调用layoutSubviews方法(不能直接调用) layoutSu ...
- CSS3 的calc()方法的使用
calc()简单介绍 calc()对大家来说,或许很陌生,不太会相信calc()是css中的部分.因为看其外表像个函数,既然是函数为何又出现在CSS中呢?这一点也让我百思不得其解,今天有一同事告诉我, ...
- Spark运行模式概述
Spark编程模型的回顾 spark编程模型几大要素 RDD的五大特征 Application program的组成 运行流程概述 具体流程(以standalone模式为例) 任务调度 DAGSche ...
- 文件系统性能测试--iozone
iozone 一个文件系统性能评测工具,可以测试Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, ...
- openVswitch(OVS)源代码分析之工作流程(数据包处理)
上篇分析到数据包的收发,这篇开始着手分析数据包的处理问题.在openVswitch中数据包的处理是其核心技术,该技术分为三部分来实现:第一.根据skb数据包提取相关信息封装成key值:第二.根据提取到 ...
- web基础 (一) http协议
一.什么是web服务 浏览器与网页服务端发起的请求与回应(返回的是一堆字符串,浏览器去渲染生成页面!)都是 标准的CS模式 ---- bs模式:客户端用浏览器即可,服务端需要自己去写 http协议是建 ...
- 为github帐号添加SSH keys(Linux和Windows)
文章转自:https://blog.cofface.com/archives/406.html/2 一.Linux增加ssh keys方法: 使用git clone命令从github上同步github ...
- 一种思路,隐藏input标签,通过label关联
<label class="btn btn-default btn-file">上传图片 <input hidden type="file" ...