首页 > 其他分享 > 二分答案专题

二分答案专题

时间:2023-08-19 18:34:33浏览次数:44  
标签:二分 专题 答案 double 签收 maxn 数组 速度

T1 包裹快递

题目描述

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

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

算法描述

对于这种最大值最小或者最小值最大的问题而言,一定是二分答案,但是这个二分答案怎么写?还是没有那么明确的。

刚开始我想的是定义F[N][5],找到所有的速度,i有早晚,i-1也有早晚,这样能形成4个时间,1表示早早,2表示早晚,3表示晚早,4表示晚晚,这样我能找到所有的速度,然后我把速度排序,在排序数组里面二分,但是我发现一个大的问题是,我不会使用sort对二维数组排序,所以后面我把所有形成的速度放在一个数组里面,在这个数组里面二分

关键部分

还有一个问题是,没能有效的利用题目提到的信息,我们二分的是速度,同时我们有距离,就能得到一个时间,那么得到的时间怎么利用呢?我们把这个时间有一个前缀和,同时和题目的信息结合起来,如果前缀和比最早的时间早,那么让他等于最早的时间,如果前缀和比最晚的时间晚,那么返回false,那么这样check函数就写好了,我认为这个部分还是比较难的,当时我是没想出来

还有一个问题?

答案是在我建立的F数组里面吗?我在数组里面二分是错误的,这个问题我还没想明白

二分部分

我们设定最小速度为0,最大速度是一个非常大的值,因为速度是小数,所以这个是在实数域上的二分。李昱东的书上讲,实数域上的二分的精度应该要比答案低一些,所以二分的过程中,我设定的精度为0.0001。

注意

这个题得开long double,开double是不行的,至于为什么?我也不太清楚,题解是这么说的

核心代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=200005;
int n,s[maxn],t[maxn],jl[maxn],cnt;
bool check(long double x){
    long double sum=0;
    for(int i=1;i<=n;i++){
        long double tt=jl[i]/x;//t表示的是通过这段距离的最短时间
        sum+=tt;
        if(sum>t[i]) return false;
        if(sum<s[i]) sum=s[i];
    }
    return true;
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d%d",&s[i],&t[i],&jl[i]);
    }
    long double l=0,r=1000000000,mid;
    while(r-l>0.0001){
        mid=(l+r)/2;
        if(check(mid)) r=mid;
        else l=mid+0.0001;
    }
    printf("%.2Lf",l);
    return 0;
}
/**
9
4 6 3
12 19 12
18 26 6
20 29 18
27 32 4
28 36 6
29 33 13
37 40 2
49 50 3
 */

标签:二分,专题,答案,double,签收,maxn,数组,速度
From: https://www.cnblogs.com/sdfzls/p/17642850.html

相关文章

  • “金九银十”的秋招季,请收下这套互联网中大厂Android面试题大全(含答案解析)
    金九银十,每年9、10月份各大互联网公司都会周期性地发生人事变动,无论是刚进入社会的职场菜鸟,还是准备跳槽的老手,都想在这个时候获得新的工作,或迎来晋升涨薪的最佳机会。不同于往年的是今年的互联网寒冬好像更冷一点,形式更严峻了一些,不少公司都在裁员,可能在求职中有一大部分人经历了......
  • 选择冒泡插入排序 异或 二分 对数器
    算法时间复杂度O(x)空间复杂度O(x)数据状况是否影响时间复杂度表现选择排序n21否冒泡排序n21否插入排序n21是(最好情况下O(N))1.选择排序:遍历找出0~n-1最小的数放在0位置,遍历找出1~n-1最小的数放在1位置时间复杂度O(n2) 空间复杂度O(1)voidswap(vector<int>&nums,inti,intj......
  • 二分搜索法-C++
    二分法,就是对一个数组中,已经排好序的数字进行搜索。使用二分法的前提条件:1.是一个数组2.该数组中的数字已经是有序的,比如升序的数字或者降序的数字都可以。inta[]={1,2,3,4};   intb[]={4,3,2,1};3.该数组中没有出现重复的数字 二分法原理:就是对一个数组,不断的划分......
  • 将正确答案,放到对应单选题的括号内,这个问题太考验职场人了!
    1职场实例小伙伴们大家好,今天我们来解决一个互助交流群内的一位群友提出的一个Excel职场需求:如何将正确答案,放到对应单选题的括号内。这个问题给小编的第一感觉就是“无从下手”,但是通过观察原始数据,小编发现还是规整且有规律的表格数据。Excel对“有规律的数据”基本上都能通过一......
  • 树专题训练
    核心城市题目描述:给定一棵树,需选定一个大小为\(k\)的连通块,最小化非连通块的点到连通块的最大距离。其中距离定义为点与连通块中所有点的路径最小值。数据范围:\(1\lek<n\le10^5\)。首先找到树的直径,以其中点为根,这样做的好处是连通块一定是包含根节点的一个连通块,之后......
  • 【愚公系列】2023年08月 WPF控件专题 Button控件详解
    (文章目录)前言WPF控件是WindowsPresentationFoundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见......
  • 2020年12月英语六级翻译真题参考答案(3套)
    2020年12月英语六级翻译真题参考答案(3套) 河北文都考研微信公众号:考研EDU 1人赞同了该文章来源:文都教育六级翻译(一)港珠澳大桥(HongKong-Zhuhai-MacauBridge)全长55公里,是我国一项不同寻常的工程壮举。大桥将三个城市连接起来,是世界上最长的跨海桥梁......
  • AcWing 860. 染色法判定二分图
    题目给定一个$n$个点$m$条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数$n$和$m$。接下来$m$行,每行包含两个整数$u$和$v$,表示点$u$和点$v$之间存在一条边。输出格式如果给定图是二分图,则输出Yes,否则输出No......
  • CTFer成长记录——CTF之Web专题·bugku—never_give_up
    一、题目链接https://ctf.bugku.com/challenges/detail/id/88.html二、解法步骤  打开网页,url中看到id=1,修改成2、3、4发现无反应。然后查看网页源代码:,提示一个网址,直接访问看看:发现url跳转到了bugku的论坛:    BP抓1p.html网页的包,在返回包中发现一串密文:  --JTI......
  • CTFer成长记录——CTF之Web专题·buuctf—Cookies
    一、题目链接https://ctf.bugku.com/challenges/detail/id/87.html?id=87&二、解法步骤  打开网页,发现自动给url上了参数:, line的值为空,filename是base64加密格式,解密后为:key.txt。  首先尝试更改line=1,、2、3、4;发现无反应,然后尝试访问用filename访问index.php。因为直......