Vijos1450 包裹快递[二分答案]

背景

小K成功地破解了密文。但是乘车到X国的时候,发现钱包被偷了,于是无奈之下只好作快递员来攒足路费去Orz教主……

描述

一个快递公司要将n个包裹分别送到n个地方,并分配给邮递员小K一个事先设定好的路线,小K需要开车按照路线给的地点顺序相继送达,且不能遗漏一个地点。小K得到每个地方可以签收的时间段,并且也知道路线中一个地方到下一个地方的距离。若到达某一个地方的时间早于可以签收的时间段,则必须在这个地方停留至可以签收,但不能晚于签收的时间段,可以认为签收的过程是瞬间完成的。

为了节省燃料,小K希望在全部送达的情况下,车的最大速度越小越好,就找到了你给他设计一种方案,并求出车的最大速度最小是多少。

格式

输入格式

第1行为一个正整数n,表示需要运送包裹的地点数。

下面n行,第i+1行有3个正整数xi,yi,si,表示按路线顺序给出第i个地点签收包裹的时间段为[xi, yi],即最早为距出发时刻xi,最晚为距出发时刻yi,从前一个地点到达第i个地点距离为si,且保证路线中xi递增。

可以认为s1为出发的地方到第1个地点的距离,且出发时刻为0。

输出格式

仅包括一个整数,为车的最大速度最小值,结果保留两位小数。

样例1

样例输入1[复制]

3
1 2 2
6 6 2
7 8 4

样例输出1[复制]

2.00

限制

对于20%的数据,n≤10;
对于30%的数据,xi,yi,si≤1000。

对于50%的数据,n≤1000;
对于100%的数据,n≤200000;xi≤yi≤108xiyi108si≤107si107

时限1s

提示

第一段用1的速度在时间2到达第1个地点,第二段用0.5的速度在时间6到达第2个地点,第三段用2的速度在时间8到达第3个地点。


实数二分,维护一个当前时间t,每到一个地方先判可行再更新t

精度1e-3都可以

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=2e5+5;
inline int read(){
    char c=getchar();int x=0,f=1;
    while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
    while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
    return x*f;
}
int n,x[N],y[N],s[N];
double l=0,r=0;
bool check(double v){
    double t=0;
    for(int i=1;i<=n;i++){
        t+=(double)s[i]/v;//printf("t %d %lf\n",i,t);
        if(t>y[i]) return 0;
        t=max(t,(double)x[i]);
    }
    return 1;
}
int main(){
    n=read();
    for(int i=1;i<=n;i++){x[i]=read();y[i]=read();s[i]=read();r=max(r,(double)y[i]);}
    while(r-l>=1e-3){
        double m=(l+r)/2;//printf("%lf\n",m);
        if(check(m)) r=m;
        else l=m;
    }
    printf("%.2f",l);
}
时间: 2024-11-03 01:30:33

Vijos1450 包裹快递[二分答案]的相关文章

二分查找(vijos1450包裹快递)

一个快递公司要将n个包裹分别送到n个地方,并分配给邮递员小K一个事先设定好的路线,小K需要开车按照路线给的地点顺序相继送达,且不能遗漏一个地点.小K得到每个地方可以签收的时间段,并且也知道路线中一个地方到下一个地方的距离.若到达某一个地方的时间早于可以签收的时间段,则必须在这个地方停留至可以签收,但不能晚于签收的时间段,可以认为签收的过程是瞬间完成的. 为了节省燃料,小K希望在全部送达的情况下,车的最大速度越小越好,就找到了你给他设计一种方案,并求出车的最大速度最小是多少. 输入格式 第1行为一

Vijos 包裹快递(二分)

背景 小K成功地破解了密文.但是乘车到X国的时候,发现钱包被偷了,于是无奈之下只好作快递员来攒足路费去Orz教主…… 描述 一个快递公司要将n个包裹分别送到n个地方,并分配给邮递员小K一个事先设定好的路线,小K需要开车按照路线给的地点顺序相继送达,且不能遗漏一个地点.小K得到每个地方可以签收的时间段,并且也知道路线中一个地方到下一个地方的距离.若到达某一个地方的时间早于可以签收的时间段,则必须在这个地方停留至可以签收,但不能晚于签收的时间段,可以认为签收的过程是瞬间完成的. 为了节省燃料,小K希

包裹快递(二分)

包裹快递 时间限制: 1 Sec  内存限制: 64 MB提交: 83  解决: 15[提交][状态][讨论版] 题目描述 桐桐为了体验生活,顺便攒点零花钱,决定到快递公司做兼职邮递员.快 递公司要将n个包裹分别送到n个地方,并分配给邮递员桐桐一个事先设定好的路线,桐桐需要开车按照路线给的地点顺序相继送达,且不能遗漏一个地点.桐桐得 到每个地方可以签收的时间段,并且也知道路线中一个地方到下一个地方的距离.若到达某一个地方的时间早于可以签收的时间段,则必须在这个地方停留至可以签 收,但不能晚于签收

包裹快递 题解

包裹快递 [问题描述] 一个快递公司要将n个包裹分别送到n个地方,并分配给邮递员小K一个事先设定好的路线,小K需要开车按照路线给的地点顺序相继送达,且不能遗漏一个地点.小K得到每个地方可以签收的时间段,并且也知道路线中一个地方到下一个地方的距离.若到达某一个地方的时间早于可以签收的时间段,则必须在这个地方停留至可以签收,但不能晚于签收的时间段,可以认为签收的过程是瞬间完成的. 为了节省燃料,小K希望在全部送达的情况下,车的最大速度越小越好,就找到了你给他设计一种方案,并求出车的最大速度最小是多少

[Luogu P1542] 包裹快递

原题链接qwq \(Structure\) 本题要求我们求出 车的最大速度最小值 . 像求 最大值最小.最小值最大 这种类型的题目,我们很自然地就能想 到用二分答案(一般情况)来求解. \(Solution\) 做二分题目时,我们要弄清楚这样几点: 二分什么 如何判断是否可行 ( 即check函数的内容 ) 当二分到一个满足条件的解时,\(L\) , \(R\) 该如何移动 针对以上三个问题,我们来一步一步解决. \(S1.\) 题目求速度,所以我们可以直接二分最大速度的值 \(S2.\) 在c

Codeforces 772A Voltage Keepsake - 二分答案

You have n devices that you want to use simultaneously. The i-th device uses ai units of power per second. This usage is continuous. That is, in λ seconds, the device will use λ·ai units of power. The i-th device currently has bi units of power store

HDU3081Marriage Match II(二分答案+并查集+最大流SAP)经典

Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2507    Accepted Submission(s): 856 Problem Description Presumably, you all have known the question of stable marriage match. A

Codeforce 371C Hamburgers (二分答案)

题目链接 Hamburgers 二分答案,贪心判断即可. 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define REP(i,n) for(int i(0); i < (n); ++i) 6 #define LL long long 7 8 char str[1010]; 9 LL len; 10 LL b, c, s, nb, nc, ns, pb, pc, ps; 11 LL money; 12 13 bool

POJ 3080 Blue Jeans(后缀数组+二分答案)

[题目链接] http://poj.org/problem?id=3080 [题目大意] 求k个串的最长公共子串,如果存在多个则输出字典序最小,如果长度小于3则判断查找失败. [题解] 将所有字符串通过拼接符拼成一个串,做一遍后缀数组,二分答案,对于二分所得值,将h数组大于这个值的相邻元素分为一组,判断组内元素是否覆盖全字典,是则答案成立,对于答案扫描sa,输出第一个扫描到的子串即可. [代码] #include <cstdio> #include <cstring> #inclu