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

洛谷p1419

1. 问题转化

我们要判断:是否存在子数组b[j..i](长度len = i-j+1),满足:lenb[j]+b[j+1]+...+b[i]​≥x

对不等式做等价变形:

  1. 两边乘lenb[j] + ... + b[i] ≥ x * len
  2. 把右边移到左边:(b[j]-x) + (b[j+1]-x) + ... + (b[i]-x) ≥ 0

我们定义新数组a[i] = b[i] - x,那么问题就转化为:

数组a中,是否存在一个长度在[s, t]范围内的连续子数组,其和 ≥ 0?

2. 前缀和的引入

定义前缀和数组sum[i] = a[1] + a[2] + ... + a[i](注意:这里sum[0] = 0,表示前 0 项和为 0)。

那么子数组a[j..i]的和可以用前缀和快速计算:sum(j..i)=sum[i]−sum[j−1]

结合子数组长度的约束:

  • 子数组长度len = i - (j-1),要求s ≤ len ≤ t
  • 代入得:s ≤ i - (j-1) ≤ t→ 整理出j-1的范围:i-t ≤ j-1 ≤ i-s

最终,问题彻底转化为:

对于每个i,在区间[i-t, i-s]内,是否存在一个k,使得sum[i] - sum[k] ≥ 0(即sum[k] ≤ sum[i])?

换句话说:只要在k ∈ [i-t, i-s]中,最小的sum[k] ≤ sum[i],就存在满足条件的子数组

而这段代码的核心,就是用单调队列,在 O (n) 时间内,高效地为每个i找到区间[i-t, i-s]内的最小sum[k]

#include<bits/stdc++.h> using namespace std; const int N=100005; //实数二分用double double a[N],sum[N],b[N];int q[N]; int s,t,n; double l,r,ans,mid; bool cheak(double k){ int l=1,r=0; sum[0]=0; for(int i=1;i<=n;i++) b[i]=a[i]-k; //前缀和 for(int i=1;i<=n;i++) sum[i]=sum[i-1]+b[i]; //q是单调队列,存最小的并且靠后的那个 for(int i=1;i<=n;i++) { if(i>=s){ while(r>=l&&sum[i-s]<sum[q[r]]) r--; q[++r]=i-s; } if(l<=r&&q[l]<i-t)l++; if(l<=r&&sum[i]-sum[q[l]]>=0) return true; } return false; } int main() { cin>>n; cin>>s>>t; for(int i=1;i<=n;i++) { cin>>a[i]; } //在范围内实数二分 ans=l=-10000,r=10000; while(r-l>1e-5){ mid=(l+r)/2; if(cheak(mid)) ans=l=mid; else r=mid; } printf("%.3lf",ans); return 0; }
http://www.jsqmd.com/news/880655/

相关文章:

  • Arm ETE嵌入式追踪技术:架构解析与调试优化
  • 2026年5月新发布河南IPO企业股权激励选择指南 - 2026年企业推荐榜
  • 基于ISO/IEC 27004的机器学习模型风险测量框架(RMF)实战解析
  • 2026年至今,黄金回收行业口碑与服务标杆企业深度解析:广州宝奢科技 - 2026年企业推荐榜
  • C语言三大经典排序算法详解:快速排序、冒泡排序与选择排序
  • python async/await异步编程设计常用插件
  • 别再死记硬背了!通过一个成绩分析项目,彻底搞懂Linux静态库和共享库的区别
  • 2026负压隔离器技术深度解析:惰性气体手套箱、放射性药品生产热室、放射性药物热室、核医药热室、生物隔离器、真空手套箱选择指南 - 优质品牌商家
  • 2026年现阶段,北京高端住宅两联供优选:合宜人居高端住宅隐蔽工程一体化服务专家 - 2026年企业推荐榜
  • 编程语言排行榜:Java 的保守与 C# 的崛起,背后是「用户体验」的战争
  • 艾多美非传销远离“一夜暴富”,拥抱“细水长流”
  • 四川钢管厂家现货批发|工程专用钢材一站式配送 - 四川盛世钢联营销中心
  • Linux音频调试不求人:用amixer命令行精准控制音量与声道,解决‘有画面没声音’问题
  • 【助睿实验指导】学生用户画像 - 考勤画像可视化分析
  • 别再手动输卡号了!用PaddleOCR+Python实现银行卡信息自动识别(附完整代码)
  • 小学期第二周
  • 不只是编译:在龙芯3A4000的银河麒麟V10上,给FileZilla解决gnutls和wxWidgets依赖的完整思路
  • 2026杭州小红书广告投放技术拆解与靠谱服务商盘点:杭州短视频运营公司、杭州AI搜索优化、杭州GEO优化、杭州SEM广告投放选择指南 - 优质品牌商家
  • 佛山中窄重型门厂家怎么选:佛山高端系统门窗厂家、佛山中窄重型断桥提升门厂家、佛山中窄重型门厂家、佛山全景推拉门窗厂家选择指南 - 优质品牌商家
  • 基础能力系列 - 多线程1 - 内存序
  • Claude Code完整安装与配置指南
  • 别让阴影偷走你的电费!手把手教你用无人机巡检排查光伏板热斑(附Python分析脚本)
  • 四川钢板厂家现货批发|工程专用钢材一站式配送 - 四川盛世钢联营销中心
  • CentOS 7.9下Lustre 2.12.9集群部署避坑指南:从内核安装到客户端挂载的完整流程
  • 项目经理的终极困境:资源永远不够,高手靠取舍赢结果
  • MNE-Python 第10天学习笔记:结果报告与可视化
  • 几字型檩条技术参数:几字型檩条、几字型钢厂家、几字形支架、几字形檩条、几字形钢、几字支座、几字支架、几字檩条、几字马凳选择指南 - 优质品牌商家
  • 保姆级教程:用Python手写逻辑回归,从零搞定西瓜书3.0α数据集分类
  • 2025-2026年国内全屋定制品牌推荐:五款口碑评测防变形开裂特点选择指南
  • 2026年5月黄金回收市场优质服务商解析 - 2026年企业推荐榜