JDOJ 1198: VIJOS-P1013 强墙

JDOJ传送门

Description

​ 在一个长宽均为10,入口出口分别为(0,5)、(10,5)的房间里,有几堵墙,每堵墙上有两个缺口,求入口到出口的最短路经。

Input

​ 第一排为n(n< =20),墙的数目。 接下来n排,每排5个实数x,a1,b1,a2,b2。 x表示墙的横坐标(所有墙都是竖直的),a1-b1和a2-b2之间为空缺。 a1、b1、a2、b2保持递增,x1-xn也是递增的。

Output

​ 输出最短距离,保留2位小数。

Sample Input

2 4 2 7 8 9 7 3 4.5 6 7

Sample Output

10.06

Source

VIJOS

最优解声明

题解:

实数域模拟+贪心。

很容易看出来,我们走的最短的距离是按直线走的。如果加了墙的话,就是翻最少的墙使路径接近这个直线即可。

代码:

#include<stdio.h>
#include<math.h>
#include<string.h>
#define min(a,b) a<b?a:b
struct wall
{
double x,z[5];
}w[22];
int n;
double e[101][101];
int judge(int a,int b,int w1,int w2)
{
if (b-a<2) return 1;
double x1=w[a].x,x2=w[b].x,y1=w[a].z[w1],y2=w[b].z[w2];
double k=(y1-y2)/(x1-x2),t=y1-x1*k;
for (int i=a+1;i<b;i++)
{
double y=k*w[i].x+t;
if (y<w[i].z[1]||(y>w[i].z[2]&&y<w[i].z[3])||y>w[i].z[4])
return 0;
}
return 1;
}
void edge(int a,int b,int w1,int w2)
{
if (!judge(a,b,w1,w2))
return;
double x1=w[a].x,x2=w[b].x,y1=w[a].z[w1],y2=w[b].z[w2];
e[a*4+w1][b*4+w2]=e[b*4+w2][a*4+w1]=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main()
{
scanf("%d",&n);
memset(e,127,sizeof(e));
for (int i=1;i<=n;i++)
{
scanf("%lf",&w[i].x);
for (int j=1;j<5;j++) scanf("%lf",&w[i].z[j]);
}
w[0].x=0;w[++n].x=10;
for (int i=1;i<5;i++) w[0].z[i]=w[n].z[i]=5;
for (int i=0;i<n;i++) for (int j=i+1;j<=n;j++) for (int k=1;k<5;k++) for (int l=1;l<5;l++) edge(i,j,k,l);
for (int i=0;i<101;i++) e[i][i]=0;
for (int k=1;k<=n*4+4;k++)
for (int i=1;i<=n*4+4;i++)
for (int j=1;j<=n*4+4;j++)
e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
printf("%.2f\n",e[1][n*4+1]);
return 0;
}

VIJOS-P1013 强墙的更多相关文章

  1. C#编写的通过汉字得到拼音和五笔码

    public static class SpellAndWbConfig { #region 变量声明 // XML文件读取实例 /// <summary> /// XML文件读取实例 / ...

  2. .net 生成拼音码与五笔码

    首先加入配置文件: <?xml version="1.0" encoding="utf-8" ?> <CodeConfig> <S ...

  3. 关于C++对汉字拼音的处理(3)

    之所以汉字转拼音的博文能出到3,主要是因为没有很完美的C++的解决方案,但是写到了这里可以有一个小结了. 以前的方法都有这种那种弊端,如果出现了无法识别的汉字(简体的)就无法修改处理了,但是下面的这种 ...

  4. C#中获得汉字的首拼音(加强版)

    /// <summary> /// 汉字拼音首字母列表 /// 包含了20901个汉字,收录的字符的Unicode编码范围为19968至40869 /// </summary> ...

  5. 取汉子拼音首字母的C#方法

    /// <summary> /// 获得一个字符串的汉语拼音码 /// </summary> /// <param name="strText"> ...

  6. 常用汉字大全:汉字读音表GB2312版(共7809个汉字)

    转载请注明来源:https://www.cnblogs.com/hookjc/ 常用汉字:a1:阿啊呵腌吖锕a2:啊呵嗄a3:啊呵a4:啊呵ai1:哀挨埃唉哎捱锿ai2:呆挨癌皑捱ai3:矮哎蔼霭嗳a ...

  7. 【防火墙技术连载11】强叔侃墙 攻击防范篇 流量型攻击之UDP Flood及防御

    http://support.huawei.com/huaweiconnect/enterprise/thread-214141.html

  8. Vijos P1023Victoria的舞会3【贪心+DFS求强联通分量】

    链接:Click Me! P1023Victoria的舞会3 Accepted 标签:Victoria的舞会[显示标签] 描写叙述 Victoria是一位颇有成就的艺术家,他因油画作品<我爱北京 ...

  9. 3D立体显示大屏幕拼接视频墙系统解决方案【转】

    http://shop.souvr.com/thread-123416-1-1.html 随着3D立体视像.全息影像等技术不断取得突破性进展,国内外越来越多的公司投身3D显示领域,产品层出不穷.3D技 ...

随机推荐

  1. 在Electron中最快速预加载脚本

    背景 在Electron打开新窗口的时候,提前加载一段JavaScript脚本,以此内置一些属性或接口给被打开的页面.之所以要以注入方式,而不是页面自己引用,原因是不想麻烦页面自行引用,不想修改旧有的 ...

  2. C语言编程的一些小总结

    1. static:可用于定义静态局部变量 在局部变量前,加上关键字static,该变量就被定义成为一个静态局部变量. 举一个静态局部变量的例子: void fn() { static int n=1 ...

  3. [洛谷P1972][题解][SDOI2009]HH的项链

    别碰我! 自己还是太蒟了…… 看了好久,最后抄参考题解打出来的…… 前面的可能影响后面的,所以按照询问右端点排序 这时候维护一个前缀和数组就可以了, 那么问题又来了,去重? 可以这样,从前往后枚举,如 ...

  4. Vue小练习 02

    用table标签渲染下面的数据, 最后一列为总分, 第一列为排名 scores = [ {name: 'Bob', math: 97, chinese: 89, english: 67}, {name ...

  5. swoole为什么不能代替nginx

    Swoole不能代替Apache和Nginx这些通用的HTTP服务器. 但基于Swoole开发的PHP应用不依赖Apache和Nginx也能提供生产级别的HTTP服务. 有需要学习交流的友人请加入交流 ...

  6. windows7使用vhd虚拟磁盘

    操作系统 : windows7_x64 创建vhd 磁盘管理 --> 操作 --> 创建vhd 挂载vhd 脚本: rem 挂载VHD @echo off (echo select vdi ...

  7. Python深拷贝与浅拷贝区别

    可变类型 如list.dict等类型,改变容器内的值,容器地址不变. 不可变类型 如元组.字符串,原则上不可改变值.如果要改变对象的值,是将对象指向的地址改变了 浅拷贝 对于可变对象来说,开辟新的内存 ...

  8. 使用cJSON库解析和构建JSON字符串

    使用cJSON库解析和构建JSON字符串 前言 其实之前的两篇博文已经介绍了json格式和如何使用cJSON库来解析JSON: 使用cJSON库解析JSON JSON简介 当时在MCU平台上使用时,会 ...

  9. 【Java基础】正则表达式

    目录 正则表达式 什么正则表达式 普通字符 预定义字符 特殊字符 数量限定字符 定位字符 选择符和分组 反向引用 预搜索 运算符的优先级 常用正则 附录 正则表达式 本文的大部分内容转载自正则表达式从 ...

  10. java高并发系列 - 第20天:JUC中的Executor框架详解2之ExecutorCompletionService

    这是java高并发系列第20篇文章. 本文内容 ExecutorCompletionService出现的背景 介绍CompletionService接口及常用的方法 介绍ExecutorComplet ...