博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(花里胡哨)New Game!(牛客国庆集训派对Day1)
阅读量:5278 次
发布时间:2019-06-14

本文共 2041 字,大约阅读时间需要 6 分钟。

链接:

来源:牛客网
 

时间限制: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 -40 1 11 3 1

输出

复制

0.236068

最后附上代码

#include 
#include
#include
using namespace std;double n,a,b,c1,c2;const int maxn=1e3+2;#define INF 0x3f3f3f3fdouble 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
>n>>a>>b>>c1>>c2; for(int i=1;i
>cir[i].x>>cir[i].y>>cir[i].r; } memset(map,INF,sizeof(map)); for(int i=1;i
0){ map[i][j]=map[j][i]=temp; } else map[i][j]=map[j][i]=0; } } int p=n+1; for(int i=1;i
0){ map[0][i]=map[i][0]=temp; } else map[0][i]=map[i][0]=0; double tmp=discx(a,b,c2,cir[i]); if(tmp>0){ map[p][i]=map[i][p]=tmp; } else map[p][i]=map[i][p]=0; } map[0][p]=map[p][0]=(fabs(c1-c2)/sqrt(a*a+b*b)); dijkstra(0); cout<
<

 

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

你可能感兴趣的文章
Unity调用Windows窗口句柄,选择文件和目录
查看>>
HashMap循环遍历方式
查看>>
React Native 入门 调试项目
查看>>
C# 通过 Quartz .NET 实现 schedule job 的处理
查看>>
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
目前为止用过的最好的Json互转工具类ConvertJson
查看>>
Day13
查看>>
tensorflow saver简介+Demo with linear-model
查看>>
Luogu_4103 [HEOI2014]大工程
查看>>
Oracle——SQL基础
查看>>
项目置顶随笔
查看>>
Redis的安装与使用
查看>>
P1970 花匠
查看>>
java语言与java技术
查看>>
NOIP2016提高A组五校联考2总结
查看>>
iOS 项目的编译速度提高
查看>>
table中checkbox选择多行
查看>>
Magento开发文档(三):Magento控制器
查看>>
性能调优攻略
查看>>
ie6解决png图片透明问题
查看>>