P6397 [COI2008] GLASNICI

题目描述

        一条直线上有 𝑛 个信使,将他们按照从左至右的顺序以 1 至 𝑛 编号。换句话说,设 𝑖 号信使的的坐标为 𝑑𝑖​,则对于 1≤𝑖<𝑛, 𝑑𝑖≤𝑑𝑖+1​。

    信使传递一条消息的方法如下:

  • 在任意时刻(不一定是整数时刻),任一信使(无论是否已知消息)都可以自由选择向左移动或者向右移动或者原地不动。其移动的速度为每秒 1 单位长度。
  • 当两个信使相距不超过一给定实数 𝑘 时,双方可以进行消息传递,也即如果两人中有一人已知该消息,则两人都知道了该消息。消息传递是瞬间发生的,不消耗时间。

现在 1 号信使得到了一条消息,请求出最小的让所有信使都得到该消息的用时。

分析

        题解区中的大佬貌似基本上用的都是二分,所以来写一篇(可能会被hack的)贪心

        首先考虑只有2个人的时候,显然是两个人同时往中间走,到距离为k的时候停下最优。                  当人数增加的时候,由于每个人相互之间不会影响,所以前面的人向前移动传递消息,就可以看做把整个系列向前移动,对后续传递是不会又影响的。

        但通过观察样例2,不难发现,存在前一个信使往前移动,且后一个不动的情况下依然可以满足距离小于k的情况。此时,后一个信使就可以在满足距离小于k的条件下向后移动,这样可以缩小该信使与他的下一个之间的距离,一定不会更劣。

        所以整个传递的过程就是一个线性,不断往后推的过程

                【能 HACK 掉的大佬请私我】

Code

        

#include<bits/stdc++.h>
using namespace std;
int n;
double k,x,t,d[100005];
int main()
{scanf("%lf%d",&k,&n);for(int i=1;i<=n;i++) scanf("%lf",d+i);if(n==1) { cout<<0; return 0; }t=max(0.0,(d[2]-d[1]-k)/2.0); d[2]-=t;for(int i=3;i<=n;i++){if(d[i-1]+k>=d[i]) { d[i]=min(d[i-1]+k,d[i]+t); continue; }if(d[i-1]+k+t>=d[i]) { d[i]=d[i-1]+k; continue; }d[i]-=t; x=(d[i]-d[i-1]-k)/2.0,d[i]-=x,t+=x;}printf("%.4lf",t);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/696413.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu server 22.04 安装docker、docker-compose

ubuntu server 22.04安装docker有两种方式&#xff0c;第一种是使用ubuntu镜像源的软件包进行安装&#xff0c;第二种使用官方GPG密钥手动添加Docker存储库方式进行安装&#xff0c;两种方式都可以&#xff0c;但第二种方式略复杂&#xff0c;这里介绍第一种比较简单的安装方式…

保研机试之【同步操作】

我们先来看一下这六个选项是什么意思&#xff1a; 思考一下&#xff0c;给出你的答案~ 再来总结一下六个选项的考点&#xff1a; 我认为答案选择B&#xff0c;因为&#xff08;延迟敏感&#xff09;&#xff08;短&#xff09;&#xff08;更新&#xff09;

让 计算机 将 数学 公式 表达式 的计算过程绘制出来 【mathematical-expression(MAE)】

目录 文章目录 目录介绍开始实战引入数学表达式计算库引入流程图代码生成库开始进行生成 介绍 大家好 今天我们来分享一个新知识&#xff0c;将数学表达式的整个计算过程&#xff0c;以及计算繁多结果在 Java 中绘制出来&#xff0c;计算机中的数学表达式计算的功能很常见了&a…

Java中PriorityQueue的用途和性能深度剖析

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

[C++核心编程-09]----C++类和对象之继承

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

探究NVMe SSD HMB应用场景与影响-<续>

如果需要采用HMB功能&#xff0c;需要SSD支持NVME协议且NVMe 1.2及以上版本。NVME协议中对HMB对应有2个关键参数&#xff1a; HMB建议值&#xff08;HMPRE&#xff09;&#xff1a;设定实际分配给HMB使用的主机内存容量&#xff0c;为设备提供最优性能的内存分配量。 HMB最小值…

Offer必备算法38_贪心算法四_八道力扣题详解(由易到难)

目录 ①力扣56. 合并区间 解析代码 ②力扣435. 无重叠区间 解析代码 ③力扣452. 用最少数量的箭引爆气球 解析代码 ④力扣397. 整数替换 解析代码1_递归改记忆化搜索 解析代码2_贪心策略 ⑤力扣354. 俄罗斯套娃信封问题 解析代码1_动态规划&#xff08;超时&#xf…

盛最多水的容器(双指针)

解题思路&#xff1a; 1&#xff0c;暴力解法&#xff08;超时&#xff09; 我们可以使用两层for循环进行遍历。找到那个最大的面积即可&#xff0c;这里我就不写代码了&#xff0c;因为写了也是超时。 2&#xff0c;双指针法 先定义两个指针一个在最左端&#xff0c;一个在…

C++入门-stack和queue(下)

大家好啊&#xff0c;在这先祝天下的母亲节日快乐啦&#xff01;现在呢&#xff0c;给大家带来C中priority_queue和容器适配器的相关知识点 3.1 C 中的优先队列&#xff08;priority_queue&#xff09;介绍 优先队列&#xff08;priority_queue&#xff09;是一种特殊的队列…

(三)小程序样式和组件

视频链接&#xff1a;尚硅谷2024最新版微信小程序 文章目录 小程序的样式和组件介绍样式-尺寸单位 rpx样式-全局样式和局部样式组件-组件案例演示组件案例-轮播图区域绘制组件案例-轮播图图片添加组件案例-绘制公司信息区域组件案例-商品导航区域组件案例-跳转到商品列表组件案…

使用Vue3开发项目,搭建Vue cli3项目步骤

1.打开cmd &#xff0c;输入 vue create neoai遇到这样的问题 则需要升级一下电脑上 Vue Cli版本哈 升级完成之后 再次输入命令&#xff0c;创建vue3项目 vue create neoai安装完成后&#xff0c;输入 npm run serve 就可以运行项目啦~ 页面运行效果

基于微信小程序+JAVA Springboot 实现的【马拉松报名系统】app+后台管理系统 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称&#xff1a; 马拉松报名系统微信小程序 项目技术栈 该项目采用了以下核心技术栈&#xff1a; 后端框架/库&#xff1a; Java SSM框架数据库&#xff1a; MySQL前端技术&#xff1a; 微信开发者工具、uni-app其他技术&#xff1a; JSP开发技术 项目展示 …