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

20260412 紫题训练

T1

设点 \(i\) 直接收到点 \(j\) 信号的最小代价为 \(\sqrt{x}\),由两圆相切的条件可知:

\[\sqrt{(x_i-x_j)^2+(x-r_j)^2}=x+r_j\\ (x_i-x_j)^2+(x-r_j)^2=(x+r_j)^2\\ (x_i-x_j)^2=4xr_j\\ x=\dfrac{(x_i-x_j)^2}{4r_j}\\ \]

DP,设 \(f_i\) 为基站 \(i\) 收到信号的最小代价。

转移式:

\[f_i=\min_{j=1}^i (f_j+\sqrt{\frac{(x_i-x_j)^2}{4r_j}})+v_i\\ =\min_{j=1}^i (f_j+\frac{x_i-x_j}{2\sqrt{r_j}})+v_i\\ =\min_{j=1}^i (\frac{x_i}{2\sqrt{r_j}}+f_j-\frac{x_j}{2\sqrt{r_j}})+v_i\\ \]

\(\min\) 里面的式子实际上是斜率为 \(\dfrac{1}{2\sqrt{r_j}}\),截距为 \(f_j-\dfrac{x_j}{2\sqrt{r_j}}\)\(x=x_i\) 处的值。

可以使用李超线段树优化,由于值域较大要动态开点,时间复杂度 \(\mathcal O(n\log n)\)

#include<bits/stdc++.h>
#define N 500005
using namespace std;
using db=double;
using ll=long long;
ll m,p[N];
int n,k,v[N],r[N];
db f[N],ans=INFINITY;
class SGT{#define v(i) tr[i].val#define l(i) tr[i].lch#define r(i) tr[i].rchprivate:struct Seg{db a,b;db get(int x){return a*x+b;}};struct node{Seg val;int lch,rch;node(){val={0,INFINITY},lch=rch=0;}}tr[N*20];int rt,idx;static bool cmp(Seg x,Seg y,int k){return x.get(k)>y.get(k);}void ins(Seg k,int &x,ll l=0,ll r=1e12){if(!x) x=++idx;int mid=l+r>>1;if(cmp(v(x),k,mid)) swap(v(x),k);if(l==r) return;if(cmp(v(x),k,l)) ins(k,l(x),l,mid);if(cmp(v(x),k,r)) ins(k,r(x),mid+1,r);}db query(int p,int &x,ll l=0,ll r=1e12){if(!x) return INFINITY;if(l==r) return v(x).get(p);int mid=l+r>>1;if(p<=mid) return min(v(x).get(p),query(p,l(x),l,mid));return min(v(x).get(p),query(p,r(x),mid+1,r));}public:void ins(Seg x){ins(x,rt);}db query(ll x){return query(x,rt);}#undef v#undef l#undef r
}tr;
int main(){scanf("%d%lld",&n,&m);for(int i=1;i<=n;i++) scanf("%lld%d%d",p+i,r+i,v+i);tr.ins({0.5/sqrt(r[1]),(f[1]=v[1])-p[1]/(2*sqrt(r[1]))});for(int i=2;i<=n;i++)f[i]=tr.query(p[i])+v[i],tr.ins({0.5/sqrt(r[i]),f[i]-p[i]/(2*sqrt(r[i]))});for(int i=1;i<=n;i++) if(p[i]+r[i]>=m) ans=min(ans,f[i]);printf("%.3f",ans);return 0;
}
http://www.jsqmd.com/news/649502/

相关文章:

  • 无锡方管切割哪家强?2026年04月口碑厂家推荐,304不锈钢/无缝钢管/316L无缝钢管,无锡方管厂家销售联系方式 - 品牌推荐师
  • 细聊后期运维有保障的水生态企业,哪家更值得选择 - myqiye
  • 用QSerialPortInfo和QSerialPort打造一个跨平台的串口调试助手(Qt/C++)
  • ZLUDA终极指南:让非NVIDIA显卡也能运行CUDA程序的完整教程
  • SPSS新手必看:5分钟搞定描述性统计分析(附实战案例)
  • Puppeteer-examples 游戏自动化:用代码玩转Google Pac-Man涂鸦的完整教程
  • 佳能Service tool v6.200 废墨清零软件,佳能打印机报错5B00,5B01,5B02,5B03,5B04,1700,P07,E08怎么办?这个清零就可以了。G5080,TS3380
  • ZED相机低光环境优化指南:Gamma/增益设置误区与夜间拍摄实战
  • 【重磅】市场的朋友圈广告代理企业 - 服务品牌热点
  • STM32 RTC日历功能避坑指南:从寄存器操作到HAL库调用的正确姿势
  • G-Helper深度解析:华硕笔记本性能调优的轻量级神器
  • 2026年挑选专业的电缆故障测试仪供应商,这几点核心标准别忽略 - 企业推荐官【官方】
  • ABAP选择屏幕交互设计:如何用MODIF ID和USER-COMMAND实现‘智能表单’?
  • Arduino IDE下STM32F103C8T6的免下载器编程与OLED汉字显示实战
  • create-vue开发工作流优化:从项目创建到生产部署的终极指南
  • 如何高效自定义parallel库Worker与进程管理:Ruby开发者的终极指南
  • nCode与Python双剑合璧:功率谱密度分析的5个高效工作流对比
  • Android ContentProvider终极指南:实现数据共享与跨应用通信
  • BilibiliSponsorBlock完全指南:10分钟学会如何自动跳过视频中的恰饭片段
  • 从Dify到Neo4j:一份给开发者的Docker容器间通信避坑指南(附Linux配置)
  • PostgreSQL 16.3 到 17.0 升级实战:我踩过的三个坑和完整避坑指南
  • 终极Simple Transformers部署指南:5步将训练好的模型无缝投入生产环境
  • 如何在5MB内实现CJK多语言字体支持:文泉驿微米黑的轻量化设计策略
  • 从Zynq到Microblaze:在Artix-7上踩坑自定义AXI IP,我的VITIS平台编译避坑实录
  • 破局与重构:TVA时代,如何从“救火队员”蜕变为“价值创造者”?
  • MBD_实战篇_信号路由模块在汽车控制器模型中的高效组织与避坑指南
  • Qwen3.5-9B嵌入式开发新思路:STM32项目智能代码生成
  • PHP怎么合并数组_array_merge函数指南【指南】
  • 3分钟掌握:如何在Blender中完美导入导出3MF格式文件
  • 7个实用mplfinance实战案例:从零构建专业交易分析系统