VIJOS-P1013 强墙
JDOJ 1198: VIJOS-P1013 强墙
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
最优解声明

题解:
实数域模拟+贪心。
很容易看出来,我们走的最短的距离是按直线走的。如果加了墙的话,就是翻最少的墙使路径接近这个直线即可。
代码:
#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 强墙的更多相关文章
- C#编写的通过汉字得到拼音和五笔码
public static class SpellAndWbConfig { #region 变量声明 // XML文件读取实例 /// <summary> /// XML文件读取实例 / ...
- .net 生成拼音码与五笔码
首先加入配置文件: <?xml version="1.0" encoding="utf-8" ?> <CodeConfig> <S ...
- 关于C++对汉字拼音的处理(3)
之所以汉字转拼音的博文能出到3,主要是因为没有很完美的C++的解决方案,但是写到了这里可以有一个小结了. 以前的方法都有这种那种弊端,如果出现了无法识别的汉字(简体的)就无法修改处理了,但是下面的这种 ...
- C#中获得汉字的首拼音(加强版)
/// <summary> /// 汉字拼音首字母列表 /// 包含了20901个汉字,收录的字符的Unicode编码范围为19968至40869 /// </summary> ...
- 取汉子拼音首字母的C#方法
/// <summary> /// 获得一个字符串的汉语拼音码 /// </summary> /// <param name="strText"> ...
- 常用汉字大全:汉字读音表GB2312版(共7809个汉字)
转载请注明来源:https://www.cnblogs.com/hookjc/ 常用汉字:a1:阿啊呵腌吖锕a2:啊呵嗄a3:啊呵a4:啊呵ai1:哀挨埃唉哎捱锿ai2:呆挨癌皑捱ai3:矮哎蔼霭嗳a ...
- 【防火墙技术连载11】强叔侃墙 攻击防范篇 流量型攻击之UDP Flood及防御
http://support.huawei.com/huaweiconnect/enterprise/thread-214141.html
- Vijos P1023Victoria的舞会3【贪心+DFS求强联通分量】
链接:Click Me! P1023Victoria的舞会3 Accepted 标签:Victoria的舞会[显示标签] 描写叙述 Victoria是一位颇有成就的艺术家,他因油画作品<我爱北京 ...
- 3D立体显示大屏幕拼接视频墙系统解决方案【转】
http://shop.souvr.com/thread-123416-1-1.html 随着3D立体视像.全息影像等技术不断取得突破性进展,国内外越来越多的公司投身3D显示领域,产品层出不穷.3D技 ...
随机推荐
- 如何修改PhpStorm快捷键
- 易优CMS:compare的基础用法
[基础用法] 名称:compare 功能:简单的变量比较,复杂的判断条件可以用if标签替换,比较标签是一组标签的集合,基本上用法 都一致. 语法: {eyou:比较标签 name='变量' value ...
- HTML入门(列表、表单、常用表单控件、浮动框架、iframe、 摘要与细节、度量标签)
一.列表 1.作用:默认显示方式为从上到下的显示数据 2.列表的组成 列表类型和列表项 3.列表的分类:有序列表 无序列表 自定义列表 无序列表语法为ul>li, 语法:ul代表列表,l ...
- RCS MO_Client&server Net log 摘录
传输过程总体来说: (1)客户端提供[客户端随机数.可选算法套件.sessionId]等信息 (2)服务端提供[服务端随机数.选用算法套件.sessionId]等信息 (3)服务端提供证书 ...
- 项目如何部署在linux系统上
前面已经安装好centos的系统,网络配置,以及部署的环境已成功啦... 下面记录的是如何部署一个项目 四个步骤: (1)放war包 (2)执行数据库脚本 (3)修改数据库的配置文件 (4)重启tom ...
- java之List接口(单列集合)
List接口概述 查询API我们可知:java.util.List 接口继承自 Collection 接口,是单列集合的一个重要分支,习惯性地会将实现了 List 接口的对 象称为List集合.在Li ...
- java之类的构造方法
构造器的特征: 具有和类相同的名称: 不声明返回值的类型: 不能被static.final.synchronized.abstract.native修饰,不能有return语句返回值: 构造器的作用: ...
- ReactNative: 使用Touchable触摸类组件
一.简介 在应用程序中,最灵魂的功能就是交互.通过给应用程序的组件添加事件来实现交互,进而提高用户体验.然而,ReactNative并不能像Web开发那样可以给大多数的标签元素绑定click事件,例如 ...
- 【Linux命令】setfacl、getfacl命令基本用法(文件权限全文控制列表acl)
一.setfacl命令setfacl用来细分linux下的文件权限. chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限. 换句话说,setf ...
- react使用moment进行日期格式化
导入moment import moment from 'moment'; 使用方式 年月日,时分秒 moment().format('YYYY-MM-DD HH:mm:ss'); // 2019-0 ...