ICPC 2020上海 D. Walker(精度二分+分类讨论)

2023/11/30 4:53:30

题意:
给定一段长度为n的区间,给定两个人的初始位置和速率,规定这两个人可以在任意时刻朝向任意方向走,转向不耗费时间。

求:所有区间都被至少一个人走过一遍所需的最少时间。

思路:

按照贪心思路,我们将所有情况大体概括为三大类

分类讨论
1.一个人走完全程
2.两个人碰头之后继续走
3两个人碰头之后就停止了

对于第一个情况没什么好说的,就用一个人的速度和他需要走的路程算就好了。

对于第二个情况,既然碰头之后还要走,我们尽量满足他重复走的区间最小,那么就是两个人相向的去走

二分
对于第三个情况,我们有两种子情况。

1.两人现实背箱走,走到端点之后掉头到了相向走的局面,最终在一个mid点回合

2.两个人先是相向走,走到mid点之后碰头,然后同时调转方向,两人再背向朝着端点走去,两人都走到端点之后结束。

所以我们就要二分这个mid点到底在哪里。

我们如何去评判这个二分的标准呢?也就是我们的check函数要怎么去写呢?
假设a的初始位置永远是小于等于b的,我们设碰头的点是mid
那么在第三种情况下a的最短路程就是mid+min(a.pos,mid-a.pos),最短时间用路程除以速率即可。

我们发现如果两个人走的时间尽可能一致那么两个人都在各自的速率下走了尽可能多的路程。所以我们要求两个人在最小情况下走的时间差距要尽可能的小。

#include<bits/stdc++.h>
using namespace std;
const long double eps = 1e-7;
long double x;
struct Node
{
    long double x,v;
}a,b;
bool check(long double mid)
{
    return (mid+min(a.x,mid-a.x))/a.v>((x-mid)+min(x-b.x,b.x-mid))/b.v;
}
long double solve()
{
    long double l=a.x,r=b.x;//两人位置
    while(r-l>eps)
    {
        long double mid=(l+r)/2;
        if(check(mid))
           r=mid;
        else
           l=mid;
    }
    return max(l/a.v+(min(a.x,l-a.x))/a.v,((x-l)+min(x-b.x,b.x-l))/b.v);//要两个人都走到端点或者mid点才可以,短板效应要求取用时长的人
}
signed main()
{
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t;
    for(cin>>t;t;t--)
    {
        cin>>x>>a.x>>a.v>>b.x>>b.v;
        if(a.x>b.x)
            swap(a,b);
        long double ans=(x+min(a.x,x-a.x))/a.v;//第一种情况
        ans=min(ans,(x+min(b.x,x-b.x))/b.v);//第一种情况
        ans=min(ans,max(b.x/b.v,(x-a.x)/a.v));//第二种情况
        ans=min(ans,solve());
        cout<<fixed<<setprecision(10)<<ans<<'\n';
    }
    return 0;
}

注意点:
1.这次精度二分不知道为什么和测评及跑的不一样
2.尽量用long double
3.二分的写法最好别用等号
4.代码过于复杂的二分一般是错的,需要重构代码之后想清楚再写
5.不要死磕一个题,C或或者I也是可以做的


http://www.jnnr.cn/a/43771.html

相关文章

PTA - 数据库合集7(10题)

目录 10-12 查询所有学生的平均成绩(MSSQL) 10-14 查询平均成绩高于75分的学生(MSSQL) 10-15 查询未登记成绩的学生&#xff08;MSSQL&#xff09; 10-17 查询没有选修C语言课程的学生(MSSQL) 10-18 查询同专业的学生&#xff08;MSSQL&#xff09; 10-21 查询S001学生选修…

词典

总时间限制: 3000ms 内存限制: 65536kB 描述 你旅游到了一个国外的城市。那里的人们说的外国语言你不能理解。不过幸运 的是&#xff0c;你有一本词典可以帮助你。 输入 首先输入一个词典&#xff0c;词典中包含不超过100000个词条&#xff0c;每个词条占据一行。 每一个词条包…

Java Web 12.3 Ajax 12.3.1 概述

Java Web 【黑马程序员新版JavaWeb基础教程&#xff0c;Java web从入门到企业实战完整版】 12 Filter & Listener & Ajax 文章目录Java Web12 Filter & Listener & Ajax12.3 Ajax12.3.1 概述12.3 Ajax 12.3.1 概述 AJAX (Asynchronous JavaScript And XML)…

神经网络 深度神经网络,深度神经网络训练

有哪些深度神经网络模型&#xff1f; 目前经常使用的深度神经网络模型主要有卷积神经网络(CNN) 、递归神经网络(RNN)、深信度网络(DBN) 、深度自动编码器(AutoEncoder) 和生成对抗网络(GAN) 等。 递归神经网络实际.上包含了两种神经网络。 一种是循环神经网络(Recurrent Neu…

青少年python系列 15.归并排序

青少年python系列目录_老程序员115的博客-CSDN博客 青少年python教学视频ppt源码 算法原理&#xff1a; 改归并排序将序列折半分成两个子序列&#xff0c;然后继续拆分&#xff0c;直到每个序列只有一个数据时&#xff0c;再将各个子序列排序后合并叠加。直到所有子序列都合并…

全网首次公开,阿里巴巴 1685 页 Java 面试突击核心讲(基础到高级足足涵盖 19 个 Java 核心技术)

互联网公司纷纷裁员&#xff0c;岗位招聘需求越来越少找工作的人却越来越多&#xff0c;如何在众多的应聘者中脱颖而出是我们每一个人都要考虑的问题。 对此 LZ 个人觉得要想在众多的应聘者中脱颖而出需要把握以下三点&#xff1a; 第一摸清现在的面试套路 第二清楚面的岗位不…

【Cmake】Ctest测试工具

目录 前言 一、初识CTest 二、使用方法 三、完整的简单测试工程 附录 附录一 cmake命令 enable_testing add_test 前言 原文&#xff1a;CTest - https://www.cnblogs.com/457220157-FTD/p/4139149.html 一、初识CTest CTest是CMake集成的一个测试工具&#xff0c;在使用CMakeL…

大数据入门之 Hadoop,HDFS,Hbase,Hive

经常听到这些大数据的名词, Hadoop,HDFS,Hbase,Hive等&#xff0c;这次就一探究竟。 Hadoop&#xff1a;是泛指大数据生态&#xff0c;实际上基本包括 存储(HDFS) 计算(MapReduce);HDFS: Hadoop分布式文件系统&#xff0c;主要是解决存储的问题;Hbase: 基于Hadoop的高性能nos…

ESP8266学习笔记(一)--搭建开发环境,并下载

环境介绍 使用安信可一体化开发环境&#xff1a;AiThinkerIDE_V0.5_Setup.exe 链接&#xff1a;https://pan.baidu.com/s/1LOlJHK3AXIia07YrQX8xVQ?pwdxnlo 提取码&#xff1a;xnlo AiThinkerIDE_V0.5_Setup.exe 下载后是个安装包。双击&#xff0c;选择提取路径后&#…

Java Web 12.1 Filter 12.1.4 Filter 拦截路径配置 12.1.5 Filter 过滤器链

Java Web 【黑马程序员新版JavaWeb基础教程&#xff0c;Java web从入门到企业实战完整版】 12 Filter & Listener & Ajax 文章目录Java Web12 Filter & Listener & Ajax12.1 Filter12.1.4 Filter 拦截路径配置12.1.5 Filter 过滤器链12.1 Filter 12.1.4 Fil…

常见的数据集合——栈

一、简介 栈(Stack)是一种特殊的线性数据集合&#xff0c;按照后进先出的规则进行操作&#xff0c;当我们在对栈进行入栈(push())或出栈(pop())操作时&#xff0c;只可以在栈顶进行操作。栈的实现结构可以是一维数组或链表来实现&#xff0c;用数组实现的栈叫作顺序栈&#x…

TypeScript 学习笔记(十万字超详细知识点总结)

&#x1f449; 订阅专栏学习TS不迷路&#xff1a;TypeScript从入门到精通 &#x1f5a5;️ 博主的前端之路&#xff08;猿创征文一等奖作品&#xff09;&#xff1a;前端之行&#xff0c;任重道远&#xff08;来自大三学长的万字自述&#xff09; &#x1f3c6;分享博主自用牛…

PMP每日一练 | 考试不迷路-10.5(包含敏捷+多选)

每日5道PMP习题助大家上岸PMP&#xff01;&#xff01;&#xff01; ​1.项目经理领导着一支跨职能团队&#xff0c;包括其本⼈在内项目共有12名相关方。在创建沟通管理计划时&#xff0c;团队识别出 2 名额外的项目相关方。这 2 名额外的 项目相关方是产品经理和 PMO 经理。请…

旅行商问题的离散布谷鸟搜索算法

Discrete cuckoo search algorithm for the travelling salesman problem 摘要 本文提出了一种改进的离散杜鹃搜索&#xff08;CS&#xff09;算法&#xff0c;用于求解著名的旅行商问题&#xff08;TSP&#xff09;&#xff0c;这是一个NP难的组合优化问题。CS是一种元启发式…

SpringCloud Alibaba-Seata

SpringCloud Alibaba-Seata 1.Seata 基础 1.先看一个问题&#xff0c;引出 Seata 单机单库(多表)处理事务示意图 分布式微服务架构下的数据库事务示意图 梳理上图 用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持∶ 仓储服务∶对给定的商品扣除仓库/商品数量订…

公众号搜题接口-题库系统使用

公众号搜题接口-题库系统使用 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&am…

java基于springboot+vue车辆违章信息管理系统

本系统是一个在线车辆违章管理系统&#xff0c;系统分为前台和后台部分&#xff0c; 前台部分主要是让用户查询违章信息和学习交规知识使用的&#xff0c; 后台主要是让管理员对系统管理使用的。用户注册登录&#xff0c;查看交管资讯&#xff0c;查看警示教育信息&#xff0c;…

GB28181国标支持H.265编码吗?

好多开发者聊到GB28181的时候&#xff0c;不可避免的提到H.265编码国标平台是否支持&#xff1f;实际上&#xff0c;GB/T28181-2016里面&#xff0c;并未提及H.265编解码相关&#xff0c;具体参见以下说明&#xff1a; 视音频编/解码技术要求 联网系统中,对视音频编/解码的技…

如何使用事务

使用事务有两种方式&#xff0c;分别为 显式事务 和 隐式事务 。 显式事务 步骤1 START TRANSACTION 或者 BEGIN &#xff0c;作用是显式开启一个事务。 BEGIN;START TRANSACTION; START TRANSACTION 语句相较于 BEGIN 特别之处在于&#xff0c;后边能跟随几个 修饰符 &am…

【计算机网络实验】使用Packet Tracer搭建网络拓扑

实验目的 1. Packet Tracer概述 2. Packet Tracer操作界面 3. 使用Packet Tracer搭建网络拓扑 4. 使用Packet Tracer进行网络配置 5. 使用Packet Tracer进行网络测试和协议分析 实验要求 利用1台2811路由器&#xff0c;1台2960交换机&#xff0c;2台PC机和1台Server互连组建…
最新文章