链接:https://ac.nowcoder.com/acm/contest/201/L
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 1048576K,其他语言2097152K
Special Judge, 64bit IO Format: %lld

题解:看样子很复杂,其实很简单,是个最短路径板子题,主要是存图,这里有三种距离

一个是圆与圆之间的距离(需减去两个圆的半径,圆上走也不消耗体力,结果为负,距离为零)

一个是圆与直线之间的距离(需减去一个圆的半径,结果为负,距离为0)

一个是直线与直线之间的距离(直接求就完事了)

另一个需要注意的是按序号代表每一个元素就行了,比如序号0代表第一根直线,1到n代表n个圆,n+1代表最后一根直线

用邻接矩阵存距离就行辣~(数据感人,大数不能用) 

  0 1 2 ``` n n+1
0            
1            
2            
```            
n            
n+1            

题目描述

Eagle Jump公司正在开发一款新的游戏。Hifumi Takimoto作为其中的员工,获得了提前试玩的机会。现在她正在试图通过一个迷宫。
这个迷宫有一些特点。为了方便描述,我们对这个迷宫建立平面直角坐标系。迷宫中有两条平行直线 L1:Ax+By+C1=0, L2:Ax+By+C2=0,还有 n 个圆 。角色在直线上、圆上、园内行走不消耗体力。在其他位置上由S点走到T点消耗的体力为S和T的欧几里得距离。
Hifumi Takimoto想从 L1 出发,走到 L2 。请计算最少需要多少体力。

输入描述:

第一行五个正整数 n,A,B,C1,C2 (1≤ n ≤ 1000, -10000 ≤ A,B,C1,C2 ≤ 10000),其中 A,B 不同时为 0。
接下来 n 行每行三个整数 x,y,r(-10000 ≤ x,y ≤ 10000, 1≤ r ≤ 10000) 表示一个圆心为 (x,y),半径为 r 的圆。

输出描述:

仅一行一个实数表示答案。与正确结果的绝对误差或者相对误差不超过 10-4 即算正确。

示例1

输入

复制

2 0 1 0 -4
0 1 1
1 3 1

输出

复制

0.236068

最后附上代码

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
double n,a,b,c1,c2;
const int maxn=1e3+2;
#define INF 0x3f3f3f3f
double map[maxn][maxn];
double d[maxn];
bool used[maxn];
int V;struct node{double x;double y;double r;
}cir[maxn];
double disc(node a,node b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y))-a.r-b.r;
}
double discx(double a,double b,double c,node ci){return fabs(ci.x*a+ci.y*b+c)/sqrt(a*a+b*b)-ci.r;
}
void dijkstra(int s){V=n+2;fill(d,d+V,INF);fill(used,used+V,false);d[s]=0;while(true){int v=-1;for(int u=0;u<V;u++){if(!used[u] &&(v==-1||d[u]<d[v]))v=u;}if(v==-1)break;used[v]=true;for(int u=0;u<V;u++){d[u]=min(d[u],d[v]+map[v][u]);}}
}
int main(){cin>>n>>a>>b>>c1>>c2;for(int i=1;i<n+1;i++){cin>>cir[i].x>>cir[i].y>>cir[i].r;}memset(map,INF,sizeof(map));for(int i=1;i<n;i++){for(int j=i+1;j<n+1;j++){double temp=disc(cir[i],cir[j]);if(temp>0){map[i][j]=map[j][i]=temp;}elsemap[i][j]=map[j][i]=0;}}int p=n+1;for(int i=1;i<n+1;i++){double temp=discx(a,b,c1,cir[i]);if(temp>0){map[0][i]=map[i][0]=temp;}elsemap[0][i]=map[i][0]=0;double tmp=discx(a,b,c2,cir[i]);if(tmp>0){map[p][i]=map[i][p]=tmp;}elsemap[p][i]=map[i][p]=0;}map[0][p]=map[p][0]=(fabs(c1-c2)/sqrt(a*a+b*b));dijkstra(0);cout<<d[p]<<endl;return 0;
}

转载于:https://www.cnblogs.com/UUUUh/p/10284065.html

(花里胡哨)New Game!(牛客国庆集训派对Day1)相关推荐

  1. 2020牛客国庆集训派对day1 A.ABB

    2020牛客国庆集训派对day1 A.ABB 题目链接 题目描述 Fernando was hired by the University of Waterloo to finish a develo ...

  2. 牛客国庆集训派对Day1 C-Utawarerumono(扩展欧几里得)

    链接:https://www.nowcoder.com/acm/contest/201/C 来源:牛客网 算术是为数不多的会让Kuon感到棘手的事情.通常她会找Haku帮忙,但是Haku已经被她派去买 ...

  3. 牛客国庆集训派对Day1 J-Princess Principal (区间查询是否是正确的括号匹配)

    链接:https://www.nowcoder.com/acm/contest/201/J 来源:牛客网 阿尔比恩王国(the Albion Kingdom)潜伏着一群代号"白鸽队(Team ...

  4. 2020牛客国庆集训派对day1 Zeldain Garden

    Zeldain Garden 题意: 问[L,R]内所有数的因子的数量和 题解: 如果传统暴力做肯定不行 我们来找找规律: 数字: 因子数目 1~n的因子数和 1 1 1 2 2 3=2+1/ 3 2 ...

  5. 2020牛客国庆集训派对day1 C. Bob in Wonderland

    Bob in Wonderland 题意: 一棵树,问最少移动多少次边可以使其变成一个链? 移动是指:从原位置拆下并连到新位置,这样算一次 题解: 错误思路 我一开始在想既然求最少移动次数,那我们就尽 ...

  6. ABB (2020牛客国庆集训派对day1)

    ABB 题意: 长度为n的字符串,问最少添加多少字符可以使其构成回文字符串 题解: 最长回文字符串我的第一反应是manacher马拉车算法,那我们直接马拉车找到已有最长回文串,然后总长度减去不就是答案 ...

  7. 牛客国庆集训派对Day1: K. Tengen Toppa Gurren Lagann(贪心)

    K. Tengen Toppa Gurren Lagann 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言2097152K 64bit IO Format: ...

  8. 牛客国庆集训派对Day1 New Game!+计算几何

    题目链接:https://www.nowcoder.com/acm/contest/201/L 题目大意:给你n个圆和两条直线,在圆上,和圆内和直线上行走不消耗体力. 在其他位置上由S点走到T点消耗的 ...

  9. 2021牛客国庆集训派对day1 H - Longest Path

    Description 给你一棵树,边有边权, 定义一条从u到v的路径,这一路上经过的点为e1,e2,...,eke_1,e_2,...,e_ke1​,e2​,...,ek​ 定义这条路径的权值f(u ...

最新文章

  1. Banana PI A20开发板 通过了CE,FCC,RoHS认证
  2. Android官方开发文档Training系列课程中文版:通过NFC共享文件之发送文件到另一台设备
  3. OpenGL ES和EGL关系(二十五)
  4. composer 安装yii2框架
  5. Java日期练习—计算已出生多少天
  6. Ubuntu 在线升级linux 内核的方法
  7. Luogu1091 合唱队形
  8. python程序应用经典实例-精心整理!9个 Python 实用案例分享
  9. Codeforces-1684 D: Traps 【贪心、排序】
  10. JDK与JRE各种版本下载地址
  11. 关于 FAT12 文件系统
  12. LABEL MATRIX里用计数器自动生成流水号和自定义条码格式
  13. 电力系统暂态稳定性仿真 matlab/simulink 仿真模型+设计报告
  14. 从CNTV下载《小小智慧树》
  15. 2020美赛赛后感想总结
  16. AngularJS 表达式
  17. 坦克世界未能连接至更新服务器,坦克世界连接到更新服务器失败,小猪教您怎么解决坦克世界连接到更新服务器...
  18. 【VHDL】带使能端的同步复位的8位寄存器设计
  19. 微信开放平台开发第三方授权登陆(二):PC网页端
  20. (私人收藏)2019WER积木教育机器人赛(普及赛)解决方案-(全套)获取能源核心...

热门文章

  1. 最大子序列和问题 hdu1231
  2. Hinton's Dark Knowledge
  3. 用Kotlin开发android平台语音识别,语义理解应用(olamisdk)
  4. aliddns ipv6_群晖使用阿里云DDNS(ipv4和ipv6)
  5. JZOJ 5878. 【NOIP2018提高组模拟9.22】电路图 A
  6. JZOJ 3885. 【长郡NOIP2014模拟10.22】搞笑的代码
  7. matlab的数值计算功能,MATlAB数值计算功能
  8. pythonsys用法_Python中 sys.argv[]的用法简明解释
  9. 研究生应当具备的三种基本技能
  10. 洛谷P1873 砍树