#floyd,斜率#洛谷 1354 房间最短路问题
题目
在一个长宽均为10,入口出口分别为(0,5),(10,5)的房间里有几堵墙,
每堵墙上有两个缺口,求入口到出口的最短路径。
分析
暴力建图,判断两个点是否有墙堵住,
可以求斜率然后判断所交点不能在墙上
在这里,你甚至可以用floyd求单源最短路
代码
#include <cstdio>
#include <cmath>
#include <map>
#define rr register
#define o(x) ((x)*(x))
using namespace std;
typedef double db; typedef pair<db,db> pdd;
const pdd St=make_pair(0.0,5.0),Ed=make_pair(10.0,5.0);
struct five{db x,y[4];}a[21]; db dis[83][83];
int n,st,ed,CNT; map<pdd,int>uk;
inline void Min(db &x,db y){x=x<y?x:y;}
inline bool against(db Xx,db Xy,db Yx,db Yy,int pl,int pr){
rr db K=(Yy-Xy)/(Yx-Xx),B=Xy-K*Xx;
for (rr int i=pl;i<=pr;++i){
rr db YY=K*a[i].x+B;
if (YY<a[i].y[0]||(a[i].y[1]<YY&&YY<a[i].y[2])||a[i].y[3]<YY) return 1;
}
return 0;
}
inline void Check(db Xx,db Xy,db Yx,db Yy,int pl,int pr){
if (against(Xx,Xy,Yx,Yy,pl,pr)) return;
rr pdd t1=make_pair(Xx,Xy),t2=make_pair(Yx,Yy);
if (!uk[t1]) uk[t1]=++CNT; if (t1==St) st=uk[t1];
if (!uk[t2]) uk[t2]=++CNT; if (t2==Ed) ed=uk[t2];
dis[uk[t1]][uk[t2]]=dis[uk[t2]][uk[t1]]=sqrt(o(Yx-Xx)+o(Yy-Xy));
}
signed main(){
scanf("%d",&n);
for (rr int i=1;i<83;++i)
for (rr int j=1;j<83;++j)
if (i!=j) dis[i][j]=1e9;
for (rr int i=1;i<=n;++i)
scanf("%lf%lf%lf%lf%lf",&a[i].x,&a[i].y[0],&a[i].y[1],&a[i].y[2],&a[i].y[3]);
Check(0.0,5.0,10.0,5.0,1,n);
for (rr int i=1;i<=n;++i)
for (rr int j=0;j<4;++j)
Check(0.0,5.0,a[i].x,a[i].y[j],1,i-1),
Check(a[i].x,a[i].y[j],10.0,5.0,i+1,n);
for (rr int i=1;i<n;++i) for (rr int i1=0;i1<4;++i1)
for (rr int j=i+1;j<=n;++j) for (rr int j1=0;j1<4;++j1)
Check(a[i].x,a[i].y[i1],a[j].x,a[j].y[j1],i+1,j-1);
for (rr int k=1;k<=CNT;++k)
for (rr int i=1;i<=CNT;++i)
for (rr int j=1;j<=CNT;++j)
if (k!=i&&k!=j&&i!=j)
Min(dis[i][j],dis[i][k]+dis[k][j]);
return !printf("%.2lf",dis[st][ed]);
}
#floyd,斜率#洛谷 1354 房间最短路问题的更多相关文章
- luogu 1354 房间最短路问题 线段与直线相交 最短路
题目链接 题目描述 在一个长宽均为10,入口出口分别为(0,5).(10,5)的房间里,有几堵墙,每堵墙上有两个缺口,求入口到出口的最短路经. 输入输出格式 输入格式: 第一排为n(n<=20) ...
- 洛谷P2402 奶牛隐藏(网络流,二分答案,Floyd)
洛谷题目传送门 了解网络流和dinic算法请点这里(感谢SYCstudio) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...
- 洛谷.4655.[CEOI2017]Building Bridges(DP 斜率优化 CDQ分治)
LOJ 洛谷 \(f_i=s_{i-1}+h_i^2+\min\{f_j-s_j+h_j^2-2h_i2h_j\}\),显然可以斜率优化. \(f_i-s_{i-1}-h_i^2+2h_ih_j=f_ ...
- 洛谷P4072 [SDOI2016]征途(带权二分,斜率优化)
洛谷题目传送门 一开始肯定要把题目要求的式子给写出来 我们知道方差的公式\(s^2=\frac{\sum\limits_{i=1}^{m}(x_i-\overline x)^2}{m}\) 题目要乘\ ...
- 洛谷P3628 [APIO2010]特别行动队(动态规划,斜率优化,单调队列)
洛谷题目传送门 安利蒟蒻斜率优化总结 由于人是每次都是连续一段一段地选,所以考虑直接对\(x\)记前缀和,设现在的\(x_i=\)原来的\(\sum\limits_{j=1}^ix_i\). 设\(f ...
- 洛谷P2900 [USACO08MAR]土地征用Land Acquisition(动态规划,斜率优化,决策单调性,线性规划,单调队列)
洛谷题目传送门 用两种不一样的思路立体地理解斜率优化,你值得拥有. 题意分析 既然所有的土地都要买,那么我们可以考虑到,如果一块土地的宽和高(其实是蒟蒻把长方形立在了平面上)都比另一块要小,那么肯定是 ...
- 洛谷P4589 [TJOI2018]智力竞赛 【floyd + 二分 + KM】
题目链接 洛谷P4589 题意可能不清,就是给出一个带权有向图,选出\(n + 1\)条链,问能否全部点覆盖,如果不能,问不能覆盖的点权最小值最大是多少 题解 如果要问全部覆盖,就是经典的可重点的DA ...
- 【洛谷3648/BZOJ3675】[APIO2014]序列分割(斜率优化DP)
题目: 洛谷3648 注:这道题洛谷3648有SPJ,要求输出方案.BZOJ3675数据组数较多但不要求输出方案. 分析: 这可能是我第三次重学斜率优化了--好菜啊 这道题首先一看就是个DP.稍微推一 ...
- 洛谷P2365 任务安排(斜率优化dp)
传送门 思路: 最朴素的dp式子很好考虑:设\(dp(i,j)\)表示前\(i\)个任务,共\(j\)批的最小代价. 那么转移方程就有: \[ dp(i,j)=min\{dp(k,j-1)+(sumT ...
- 斜率优化dp学习笔记 洛谷P3915[HNOI2008]玩具装箱toy
本文为原创??? 作者写这篇文章的时候刚刚初一毕业…… 如有错误请各位大佬指正 从例题入手 洛谷P3915[HNOI2008]玩具装箱toy Step0:读题 Q:暴力? 如果您学习过dp 不难推出d ...
随机推荐
- OFDM系统各种调制阶数的QAM误码率(Symbol Error Rate)与 误比特率(Bit Error Rate)仿真结果
本文是OFDM系统的不同QAM调制阶数的误码率与误比特率仿真,仅考虑在高斯白噪声信道下的情景,着重分析不同信噪比下的误码(符号)率性能曲线,不关心具体的调制与解调方案,仿真结果与理论的误码率曲线进行了 ...
- 【LeetCode剑指offer#04】包含min函数的栈、栈的压入、弹出序列(辅助栈的应用)
包含min函数的栈 https://leetcode.cn/problems/bao-han-minhan-shu-de-zhan-lcof/ 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元 ...
- 【Azure App Service】App Service设置访问限制后,使用git clone代码库出现403报错
问题描述 在App Service中,为App Service配置了访问限制,结果导致在克隆App Service的代码时候,遇见403错误. 问题解答 因为在使用 git clone App Ser ...
- 了解 Docker 网络
本章将会简单地讲述 Docker 中的网络,对于 CNM.Libnetwork 这些,限于笔者个人水平,将不会包含在内. Docker 的四种网络模式 Docker 有 bridge.none.hos ...
- 聊聊图数据库和图数据库的小知识 Vol.02
2010 年前后,对于社交媒体网络研究的兴起带动了图计算的大规模应用. 2000 年前后热门的是 信息检索 和 分析 ,主要是 Google 的带动,以及 Amazon 的 e-commerce 所用 ...
- php7中的三元运算符的区别
<?php $tmparr = ['cover'=>'http://img.immomo.com.cn']; echo isset($tmparr['cover'])."\n&q ...
- maven打包出现 ����applets.user.service.UserService����-2022新项目
一.问题由来 新项目的框架刚搭建好,还不能正常的运行,我们这边就开始写代码,因为项目还在设计阶段,很多东西比如说需求 都还在讨论之中.分层架构采用的是cola4.0的架构,具体的代码由我们自己来进行实 ...
- 创建 nest-websocket 服务 用于mock单点登录开发
需求 有个单点登录的任务,但是都是现场的服务 api 和 websocket 都在现在 开发本机mock服务 本地搭建环境先模拟一下 资料 NestJS WebSocket 开始使用 https:// ...
- ReACT介绍与llama_index ReActAgent实践
Agent是大模型的重要应用方向,而ReACT是学术界提出的重要方法,本文介绍ReACT论文,然后通过llama_index ReActAgent来分析ReACT的执行过程. ReACT <RE ...
- WPF之命令
目录 命令系统的基本元素 基本元素之间的关系 小试命令 WPF的命令库 命令参数 命令与Binding的结合 近观命令 ICommand接口与RoutedCommand 自定义Command 定义命令 ...