题目

在一个长宽均为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 房间最短路问题的更多相关文章

  1. luogu 1354 房间最短路问题 线段与直线相交 最短路

    题目链接 题目描述 在一个长宽均为10,入口出口分别为(0,5).(10,5)的房间里,有几堵墙,每堵墙上有两个缺口,求入口到出口的最短路经. 输入输出格式 输入格式: 第一排为n(n<=20) ...

  2. 洛谷P2402 奶牛隐藏(网络流,二分答案,Floyd)

    洛谷题目传送门 了解网络流和dinic算法请点这里(感谢SYCstudio) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...

  3. 洛谷.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_ ...

  4. 洛谷P4072 [SDOI2016]征途(带权二分,斜率优化)

    洛谷题目传送门 一开始肯定要把题目要求的式子给写出来 我们知道方差的公式\(s^2=\frac{\sum\limits_{i=1}^{m}(x_i-\overline x)^2}{m}\) 题目要乘\ ...

  5. 洛谷P3628 [APIO2010]特别行动队(动态规划,斜率优化,单调队列)

    洛谷题目传送门 安利蒟蒻斜率优化总结 由于人是每次都是连续一段一段地选,所以考虑直接对\(x\)记前缀和,设现在的\(x_i=\)原来的\(\sum\limits_{j=1}^ix_i\). 设\(f ...

  6. 洛谷P2900 [USACO08MAR]土地征用Land Acquisition(动态规划,斜率优化,决策单调性,线性规划,单调队列)

    洛谷题目传送门 用两种不一样的思路立体地理解斜率优化,你值得拥有. 题意分析 既然所有的土地都要买,那么我们可以考虑到,如果一块土地的宽和高(其实是蒟蒻把长方形立在了平面上)都比另一块要小,那么肯定是 ...

  7. 洛谷P4589 [TJOI2018]智力竞赛 【floyd + 二分 + KM】

    题目链接 洛谷P4589 题意可能不清,就是给出一个带权有向图,选出\(n + 1\)条链,问能否全部点覆盖,如果不能,问不能覆盖的点权最小值最大是多少 题解 如果要问全部覆盖,就是经典的可重点的DA ...

  8. 【洛谷3648/BZOJ3675】[APIO2014]序列分割(斜率优化DP)

    题目: 洛谷3648 注:这道题洛谷3648有SPJ,要求输出方案.BZOJ3675数据组数较多但不要求输出方案. 分析: 这可能是我第三次重学斜率优化了--好菜啊 这道题首先一看就是个DP.稍微推一 ...

  9. 洛谷P2365 任务安排(斜率优化dp)

    传送门 思路: 最朴素的dp式子很好考虑:设\(dp(i,j)\)表示前\(i\)个任务,共\(j\)批的最小代价. 那么转移方程就有: \[ dp(i,j)=min\{dp(k,j-1)+(sumT ...

  10. 斜率优化dp学习笔记 洛谷P3915[HNOI2008]玩具装箱toy

    本文为原创??? 作者写这篇文章的时候刚刚初一毕业…… 如有错误请各位大佬指正 从例题入手 洛谷P3915[HNOI2008]玩具装箱toy Step0:读题 Q:暴力? 如果您学习过dp 不难推出d ...

随机推荐

  1. Programming Abstractions in C阅读笔记:p293-p302

    <Programming Abstractions in C>学习第73天,p293-p302总结,总计10页. 一.技术总结 1.时间复杂度 (1)quadratic time(二次时间 ...

  2. 新零售SaaS架构:订单履约系统的应用架构梳理

    订单履约系统的核心能力 通过分析订单履约的全流程和各个业务活动,我们可以梳理出订单履约的核心业务链路,基于业务链路,我们抽象出订单履约系统的三大系统能力,分别为履约服务表达.履约调度.物流配送. 履约 ...

  3. 【LeetCode二叉树#19】有序数组转换为二叉搜索树(构造二叉树)

    将有序数组转换为二叉搜索树 力扣题目链接(opens new window) 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个 ...

  4. 关于Python中math 和 decimal 模块的解析与实践

    本文分享自华为云社区<Python数学模块深度解析与实战应用>,作者: 柠檬味拥抱. 在Python中,math 和 decimal 模块是处理数学运算的重要工具.math 提供了一系列常 ...

  5. hibernate-delete(Entity)的顺序问题

    hibernate为我们提供了删除直接根据实体参数删除数据的方法: HibernateTemplate().delete(entity); public void delete(final Objec ...

  6. 【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?

    问题描述 当 Azure Web App 进行安全扫描后,发现依旧支持很多弱TLS加密套件(Weak TLS Ciphers Suite),那么是否有办法来关闭这些弱的加密套件呢? 在Windows ...

  7. KVM整理

    管理命令: virsh list --all 查看所有虚拟机状态 virsh start vm1 VM1开机 virsh shutdown vm1 VM1关机 virsh destroy vm1 强制 ...

  8. Jmeter 之常数吞吐量作用

    一   添加方法: 线程组右键->添加->定时器-> 常数吞吐量定时器 二 作用: 常数吞吐量定时器的作用: 设置最大的吞吐量不超过设置的值 注意:如果线程能发送的请求远远低于设置的 ...

  9. kafka 为什么能那么快?高效读写数据,原来是这样做到的

    1. 利用 Partition 实现并行处理 我们都知道 Kafka 是一个 Pub-Sub 的消息系统,无论是发布还是订阅,都要指定 Topic. Topic 只是一个逻辑的概念.每个 Topic ...

  10. 速存,详细罗列香橙派AIpro外设接口样例大全(附源码)

    本文分享自华为云社区<香橙派AIpro外设接口样例大全(附源码)>,作者:昇腾CANN. Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能 AI 开发板,其搭载了昇 ...