1548: Design road

Submit Page    Summary    Time Limit: 2 Sec     Memory Limit: 256 Mb     Submitted: 450     Solved: 237


Description

You need to design road from (0, 0) to (x, y) in plane with the lowest cost. Unfortunately, there are N Rivers between (0, 0) and (x, y).It costs c1 Yuan RMB per meter to build road, and it costs c2 Yuan RMB per meter to build a bridge. All rivers are parallel to the Y axis with infinite length.

Input

There are several test cases.
Each test case contains 5 positive integers N,x,y,c1,c2 in the first line.(N ≤ 1000,1 ≤ x,y≤ 100,000,1 ≤ c1,c2 ≤ 1000).
The following N lines, each line contains 2 positive integer xi, wi ( 1 ≤ i ≤ N ,1 ≤ xi ≤x, xi-1+wi-1 < xi , xN+wN ≤ x),indicate the i-th river(left bank) locate xi with wi width.
The input will finish with the end of file.

Output

For each the case, your program will output the least cost P on separate line, the P will be to two decimal places .

Sample Input

1 300 400 100 100
100 50
1 150 90 250 520
30 120

Sample Output

50000.00
80100.00

Hint

Source

题目意思:
给你两点(0,0) (x,y)
在这两点之间有n条平行于y轴的河流
修路每单位花费c1,搭桥每单位花费c2
问你到达(x,y)最小的花费是多少
分析:
 
 

把所有合河流移动到左边,所以肯定是直接从(0,0)搭桥到河流对岸的某点(sum,y)
sum是所有河流的宽度
然后从(sum,y)修路到目的地
现在想象一下
整条路径(包括路和桥)
路的两端是固定的
中间河流对面某点(sum,y)是不固定的
随着该点的移动,路径长度的不同的
所以花费也是不同的
所以找一个合适的y
使得花费最小
极值寻找问题,采用三分
三分寻找合适的y
使得花费最小

注意精度问题
eps10的-3次方够了
 
code:
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<cstring>
#include<set>
#include<queue>
#include<algorithm>
#include<vector>
#include<map>
#include<cctype>
#include<stack>
#include<sstream>
#include<list>
#include<assert.h>
#include<bitset>
#include<numeric>
using namespace std;
typedef long long LL;
#define max_v 1005
#define eps 1e-3
double dis(double x1,double y1,double x2,double y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main()
{
int n;
double x,y,c1,c2;
while(~scanf("%d %lf %lf %lf %lf",&n,&x,&y,&c1,&c2))
{
double sum=,w,x1;
for(int i=;i<n;i++)
{
scanf("%lf %lf",&x1,&w);
sum+=w;
}
sum=x-sum;
double L=,R=y,mid,mmid;
while(R-L>eps)
{
mid=(L+R)/2.0;
mmid=(mid+R)/2.0;
double s1=dis(,,sum,mid)*c1+dis(sum,mid,x,y)*c2;
double s2=dis(,,sum,mmid)*c1+dis(sum,mmid,x,y)*c2;
if(s1>s2)
L=mid;
else
R=mmid;
}
printf("%.2lf\n",dis(,,sum,mid)*c1+dis(sum,mid,x,y)*c2);
}
return ;
}
/*
题目意思:
给你两点(0,0) (x,y)
在这两点之间有n条平行于y轴的河流
修路每单位花费c1,搭桥每单位花费c2
问你到达(x,y)最小的花费是多少 分析:
把所有合河流移动到左边,所以肯定是直接从(0,0)搭桥到河流对岸的某点(sum,y)
sum是所有河流的宽度
然后从(sum,y)修路到目的地
现在想象一下
整条路径(包括路和桥)
路的两端是固定的
中间河流对面某点(sum,y)是不固定的
随着该点的移动,路径长度的不同的
所以花费也是不同的
所以找一个合适的y
使得花费最小
极值寻找问题,采用三分
三分寻找合适的y
使得花费最小 注意精度问题
eps10的-3次方够了
*/

1548: Design road (思维题 做法:三分找极值)的更多相关文章

  1. 三分 --- CSU 1548: Design road

    Design road Problem's Link:   http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1548 Mean: 目的:从(0,0)到 ...

  2. CSU 1548 Design road(三分查找)

    题目链接:https://cn.vjudge.net/problem/142542/origin Description You need to design road from (0, 0) to ...

  3. HLJU 1221: 高考签到题 (三分求极值)

    1221: 高考签到题 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 9  Solved: 4 [Submit][id=1221">St ...

  4. PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记

    PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...

  5. [NOIP2005] 过河【Dp,思维题,缩点】

    Online Judge:Luogu P1052 Label:Dp,思维题,缩点,数学 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子 ...

  6. ZOJ 3829 贪心 思维题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...

  7. CodeForces - 631C ——(思维题)

    Each month Blake gets the report containing main economic indicators of the company "Blake Tech ...

  8. UVA.679 Dropping Balls (二叉树 思维题)

    UVA.679 Dropping Balls (二叉树 思维题) 题意分析 给出深度为D的完全二叉树,按照以下规则,求第I个小球下落在那个叶子节点. 1. 默认所有节点的开关均处于关闭状态. 2. 若 ...

  9. UVALive.2995 Image Is Everything (思维题 三维坐标转换)

    UVALive.2995 Image Is Everything (思维题 三维坐标转换) 题意分析 这题实在是没思路,就照着打了一遍,把不理解的地方,写了注释. #include <iostr ...

随机推荐

  1. Android下用程序的方法为ListView设置分割线Divider样式

    使用XML的时候可以使用android:divider属性为ListView设置分割线的样式(颜色或者资源文件),而在Java代码中默认提供的方法 listView.setDivider() 却只支持 ...

  2. Fastify 系列教程二 (中间件、钩子函数和装饰器)

    Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) Fastify 系列教程三 (验证.序列化和生命周期) Fastify ...

  3. vue+vux 父组件控制子组件弹层

    知识点用到了vue父子组件之间的传值,以及使用watch和v-model控制vux中XDialog组件. 需要注意的问题: 1.父组件向子组件传值使用的是props(单向传值),子组件创建props, ...

  4. cordova打包安卓或IOS应用

    1,先搞个java jdk.我先用的1.7版本的,用cordova打包的时候各种报错,应该是向下不兼容吧.又换了个1.8版本.装jdk一定要注意jdk跟jre不能都装在目标文件夹的根目录下,jdk跟j ...

  5. redis 集群目标、集群查看、配置方法及过程、哨兵配置启动

    集群目标 主从复制,读写分离:故障切换(通过哨兵实现) 查看集群状态 info replication 配置方法 只设置从数据库就可以了:最佳实践,在主数据库配置masterauth <mast ...

  6. oracle profile 概要文件

    Profile文件概述: Profile是Oracle安全策略的一个组成部分,当Oracle建立数据库时,会自动建立名称为Default的Profile文件. 创建用户的时候,如果没有指定profil ...

  7. 福大软工1816:Beta(5/7)

    Beta 冲刺 (5/7) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务 文字/口头描述 组织会议 确定统一界面wxpy.db之 ...

  8. popup定位引擎popper.js介绍

    https://medium.com/@FezVrasta/popper-js-v1-5e8b3acd888c https://survivejs.com/blog/popper-interview/ ...

  9. jetty8 中的异常 There is an error in invoking javac. A full JDK (not just JRE) is required...

    在jetty文件夹下的start.ini文件里有这么一行"-Dorg.apache.jasper.compiler.disablejsr199=true"注释,把这个注释去掉,再启 ...

  10. jQuery 中bind(),live(),delegate(),on() 区别

    on()来改写通过 .bind(), .live(), .delegate()所注册的事件 /* The jQuery .bind(), .live(), and .delegate() method ...