当前位置: 首页 > news >正文

P11854 [CSP-J2022 山东] 宴会

题目传送门

当时这个题是我考试题,考试的时候感性理解出来的三分做法。

首先咱感性理解一下,当\(x_0\)位于左边无穷远处时,答案是个很大的数。

然后随着\(x_0\)从左向右移动,答案呈递减趋势。当\(x_0\)到达答案那个点时,距离最小。然后\(x_0\)接着向右移动,答案又递增。当\(x0\)位于右侧无穷远处时,答案又会趋近于无穷大。

所以我们猜想,\(ans\)\(x_0\)变化的函数先递减再递增。当\(x_0\)位于谷底时,\(ans\)就会取最小值。

接下来我们简单证明一下结论。

首先我们设\(i\)到集合地点所需时间关于\(x_0\)的函数为\(f(x_0)\)。显然\(f(x_0)=|x_0-x_i|+t_i\),图像如下:

P11854_1_1

这是一个折线。对于其他的\(i\),也应该是这样的折线。我们把所有的\(n\)条折线画在同一平面直角坐标系中,大概这样:

P11854_2

而对于一个确定的\(x_0\),聚集时间就是这一坨函数里\(x_0\)对应的因变量的最大值,对应到图像里就是\(x=x_0\)与各个图像交点里最高的点的纵坐标。

P11854_3

至于聚会时间关于\(x_0\)的函数图像,很明显就是对于每个横坐标\(x_0\)都取一下最大值得到的点组成的图像。比如这样。

P11854_4

看起来,对于这种情况来说是个折线。但是如何说明其他情况也是折线呢?

我们把这个过程看作一个函数图像两两合并的过程,也就是对于两个函数做上面的过程。这样事情就会简单很多,因为它们的斜率相同,位置关系无非是包含和相交两种。

如果是包含的话,显然合并后结果就是上面的函数。这种情况下两根折线合并后还是折线。

P11854_5

如果是相交的话,各取两个函数比较高的线,最终还是个折线。

P11854_6

所以折线间两两合并,最终结果还是折线,也就证明了我们可以用三分解决本题。

代码:

P11854
#include<bits/stdc++.h>
#define int long long
using namespace std;inline int read(){int x=0,f=1;char c=getchar();while(c<48){if(c=='-') f=-1;c=getchar();} while(c>47) x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}const int N=1e5+5;
const int inf=1e16;
const double sta=1e-5;
const double STA=0.01;
int T,n,pos[N],t[N];inline double f(double x){double ans=0;for(int i=1;i<=n;i++){ans=max(ans,fabs(pos[i]-x)+t[i]);}return ans;
}signed main(){T=read();while(T--){n=read();int mi=inf,ma=0;for(int i=1;i<=n;i++){pos[i]=read();mi=min(mi,pos[i]);ma=max(ma,pos[i]);}for(int i=1;i<=n;i++){t[i]=read();}//实数三分 double l=mi,r=ma;//显然答案不会在这个区间外 while(r-l>sta){double lmid=l+(r-l)/3,rmid=r-(r-l)/3;double ans1=f(lmid),ans2=f(rmid);//f(x0):求聚会时间 if(ans1>ans2){l=lmid;}else{r=rmid;}}//底下是自制的一个判断整数//具体来说,如果最终结果与它相邻的两个整数的误差不超过允许的范围,那我们就认为它是整数,否则就是小数 double ll=floor(l);double lll=ceil(l);if(STA>l-ll){int ans=ll;printf("%lld\n",ans);}else if(STA>lll-l){int ans=lll;printf("%lld\n",ans);}else{printf("%.1lf\n",l);}}return 0;
} 
http://www.gsyq.cn/news/13510.html

相关文章:

  • 2025 年试验机厂家权威推荐榜:TOP5 优质厂家综合实力解析,助力科研与工业客户精准选型电子万能材料/橡胶拉力/塑料拉力/扬州拉力试验机厂家推荐
  • 跟Manus聊聊Bean生命周期设计哲学[From Manus]
  • 国产SUB-1G芯片DP4363F支持119-1050mhz超低功耗 - 动能世纪
  • 详细介绍:Linux----gcc、g++的使用以及一些问题
  • Sep 28
  • 图像采集卡:连接镜头与机器的“视觉神经”,释放工业智能核心动力
  • 2025 年最新推荐铝塑膜源头厂家权威排行榜:聚焦 3000㎡厂房与完整产业链的优质企业盘点复合/防锈防潮/木箱包装/设备包装铝塑膜厂家推荐
  • 《码界飞升传II:数据星辰异界问道》
  • 结论(数学)
  • 打包present, but unavailable
  • 2025 年最新推荐环保门禁厂家权威排行榜:清洁运输 / 智能 / 移动源系统及电子台账厂商详析企业/智能环保门禁厂家推荐
  • 2025 年即时通讯公司推荐 小天互连:私有化部署即时通讯、信创即时通讯、国产化即时通讯、局域内网即时通讯、企业 IM 即时通讯解决方案解析
  • GJOI 模拟赛6、7部分题解
  • ABC425题解
  • STM32中的Flash、ROM与RAM全解析 - 指南
  • 9.22 总结
  • 网络工程 --- 一个嵌入式网络设备中存在哪些开源软件
  • 挖同行墙脚!有稳定供应商的客户怎么下手构建?
  • LeetCode 386 字典序排数 Swift 题解:模拟字典翻页的遍历技巧 - 实践
  • 通过velocity将增量发版的代码及文件生成生成一个linux shell文件(解放运维)
  • 题解:AT_abc214_g [ABC214G] Three Permutations
  • 从企业级项目到普惠API:我如何将自研的人脸识别引擎打造成「识度AI」
  • 帮助向量机深度解析:从数学原理到工程实践的完整指南
  • 【Array】类型化数组:强类型集合的优势
  • 【安装红帽子 redhat Linux 9.0版本】教程
  • CentOS 10服务器版 部署Zabbix7.2 server端 - 教程
  • 完整教程:雪山飞狐之 Swift 6.2 并发秘典:@concurrent 的江湖往事
  • 数字孪生背后的通信协议:MQTT、OPC UA选型指南 - 指南
  • 深入解析:DIC技术在极端条件下的应用及解决方案
  • Nginx反向代理配置全流程实战:从环境搭建到HTTPS部署 - 详解