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条边(正向反 ...
随机推荐
- 【费马小定理+快速幂取模】ACM-ICPC 2018 焦作赛区网络预赛 G. Give Candies
G. Give Candies There are N children in kindergarten. Miss Li bought them N candies. To make the pro ...
- date的讲解及分析
Date() 对象(获取时间的) 不过是用类的写法来实现的:(他也没有私有属性,都是通过__proto__继承来的) Date() 分两大系 一个是get系列(及获取时间) 一 ...
- ROS-PCQ基于IP的限速(总带宽上下行5M)
/ip firewall mangle add chain=forward src-address=192.168.0.0/16 \ action=mark-connection new-connec ...
- Spring Security编程模型
1.采用spring进行权限控制 url权限控制 method权限控制 实现:aop或者拦截器(本质就是之前之后进行控制)--------------------proxy就是 2.权限模型: 本质理 ...
- jshint在bat批处理中闪退,代码中无法调用的问题
先说解决办法:加个call eg: call jshint --version Pause 具体原因有空再更
- pycharm连接虚拟机
Pycharm需要在版本2017.3.3之后才能连接 通过本地的python解释器运行虚拟机的py文件 需要先配置虚拟环境 配置Ubuntu虚拟环境 # 在VitualBox创建Ubuntu虚拟 ...
- 解决问题E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
在用sudo apt-get install 安装软件时,结果终端提示: “E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/ ...
- Zookeeper 介绍翻译
源网址链接 https://zookeeper.apache.org/ Apache Zookeeper 开放源码的服务器,提供高可靠的分布式协调服务. Zookeeper是一个维护配置信息,命名服务 ...
- 玩转laravel5.4的入门动作(二)
做个文章的增删改查 第一步 把数据库的表结构建好,生成迁移 1 怎么建,当然是用php artisan命令了 使用 Artisan 命令 make:migration 来创建一个新的迁移: php ...
- OpenCL 查询平台和设备
▶ 查询平台和设备的代码以结果,放在这里方便以后逐渐扩充和查询(没有营养) #include <stdio.h> #include <stdlib.h> #include &l ...