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

第九届河北省大学生程序设计竞赛 L题思路分享(数学,三阶差分)

题意概述

敌军一共有 \(n\) 个阵营,第 \(i\) 个阵营会向 \([i+1, \min(i+r_i, n)]\) 区间内的所有阵营发送一封电报。

拥有一个拦截器,若有一封电报从阵营 \(p\) 发送到阵营 \(q\),拦截器位于 \(x\),并且 \(p \leq x \leq q\),那么该电报就会被拦截,拦截价值为 \(\min(x-p, q-x)\)

问对于每个阵营 \(i\),在该位置放置拦截器的拦截价值之和为多少?

思路

先将 \(r_i\) 调整为 \(\min(i+r_i, n) - i\)

\(i\) 个阵营发送电报,只会对 \([i, i+r_i]\) 区间贡献有影响,根据拦截价值的定义,考虑分类讨论。

\(mid = (i+i+r+1)/2\)

  1. \(i \le j \le mid\),有两端贡献,一段为 \([j,2j-i]\),每个点 \(x\) 贡献 \(x-j\),总贡献为 \((2j-i-j+1) \times (2j-i+j) / 2 - j \times (2j-i-j+1)\) ;另一端为 \([2j-i+1,i+r]\),每个点 \(x\) 贡献 \(j-i\),总贡献为 \((i+r-(2j-i)) \times (j-i)\) 。发现前一部分有 \(/2\) 不好处理,考虑对所有贡献都 \(\times 2\)。整理出贡献总和为 \(-3j^2+(6i+2r+1)j-3i^2-i-2ri\)

  2. \(mid \lt j \le i+r\),只有一段贡献 \([j,i+r]\),每个点 \(x\) 贡献 \(x-j\),总贡献为 \((i+r-j+1) \times (i+r+j) / 2 - (i+r-j+1) \times j\) 。同样把贡献 \(\times 2\),整理出贡献总和为 \(j^2+(-2r-2i-1)j+i^2+r^2+2ri+i+r\)

因此对于每个位置,差分维护各次的系数即可。

时间复杂度 \(\mathcal{O}(n)\)

代码

//author:kzssCCC#include <bits/stdc++.h>
using namespace std;
using ll = long long;void solve(){int n;cin >> n;vector<int> R(n+1);for (int i=1;i<=n;i++){cin >> R[i];}	vector<array<ll,3>> diff(n+2,{0,0,0});for (int i=1;i<=n;i++){int l = i;int r = min(n,i+R[i]);R[i] = r-l;int mid = (l+r+1)/2;diff[l][0] += -3ll*i*i-i-2ll*R[i]*i;diff[mid+1][0] -= -3ll*i*i-i-2ll*R[i]*i;diff[l][1] += 6ll*i+2ll*R[i]+1;diff[mid+1][1] -= 6ll*i+2ll*R[i]+1;diff[l][2] += -3;diff[mid+1][2] -= -3;diff[mid+1][0] += (ll)i*i+(ll)R[i]*R[i]+2ll*i*R[i]+i+R[i];diff[r+1][0] -= (ll)i*i+(ll)R[i]*R[i]+2ll*i*R[i]+i+R[i];diff[mid+1][1] += -2ll*R[i]-2ll*i-1;diff[r+1][1] -= -2ll*R[i]-2ll*i-1;diff[mid+1][2] += 1;diff[r+1][2] -= 1;}for (int i=1;i<=n;i++){for (int j=0;j<=2;j++){diff[i][j] += diff[i-1][j];}cout << (diff[i][2]*i*i+diff[i][1]*i+diff[i][0])/2 << '\n';}
}int main(){ios::sync_with_stdio(false);cin.tie(0);int t = 1;// cin >> t;while (t--) solve();return 0;
}
http://www.jsqmd.com/news/811688/

相关文章:

  • 【Oracle数据库指南】第35篇:Oracle特殊对象——簇与索引组织表(IOT)
  • 乌海豆包AI推广找哪家?宁夏壹山网络全域AI营销实力甄选 - 宁夏壹山网络
  • Confluence数据迁移踩坑实录:从物理机到K8s集群,我是如何无损迁移200G知识库的?
  • 深度解析:城通网盘直连地址获取技术方案
  • 告别裸奔MCU!手把手教你用OSAL调度器重构STM32项目(附看门狗实战)
  • GPT-4 Turbo访问权、优先响应、高级数据分析——ChatGPT Plus五大隐藏权益深度拆解,92%用户根本没用全
  • 2026实测|10款去AI痕迹工具红黑榜 - 殷念写论文
  • Taotoken在数据预处理与分析脚本中调用大模型的集成案例
  • Anthropic Claude Haiku 4.5 安全突破:勒索行为从96%降至0%
  • 基于MCP协议构建AI驱动的Upwork自动化工作流:从工具化接口到安全实践
  • 在虚拟机中快速部署大模型调用环境,使用Taotoken稳定接入OpenAI兼容API
  • 语义层不能只剩指标和维度:Data Agent 时代,企业到底该建什么?
  • 3D打印定制外壳:从设计到实战,为开源硬件打造专属保护方案
  • 如何3分钟彻底清理Zotero文献库重复条目:智能合并插件终极指南
  • 3个技巧快速掌握加密压缩包密码找回:ArchivePasswordTestTool新手指南
  • 3步搞定安卓应用Windows安装:告别臃肿模拟器的终极解决方案
  • 14602开源|黄大年茶思屋第146期第二题:支持采集内容运动的静态3DGS重建
  • 为AI编程助手构建本地知识库:YAP项目实战指南
  • 邀请有礼:把好用的 AI 工具分享出去,和朋友一起拿积分
  • Anthropic ARR突破440亿美元:Q1营收同比增长80倍深度分析
  • 微信聊天记录永久保存:免费开源工具WeChatExporter完整使用指南
  • EtherCAT PDO映射避坑指南:从XML到STM32代码,搞定那‘多出来’的16位变量
  • 三维风场可视化终极指南:用Cesium-Wind轻松创建动态气象展示
  • Cursor Pro破解工具:3分钟快速激活高级功能的终极方案
  • BK3633深度睡眠功耗实测:如何配置到1uA并保持定时器工作(避坑指南)
  • 20260513 1
  • 工业AR巡检操作全流程
  • H3C模拟器实战:基于时间与部门的精细化ACL策略部署
  • 企业级应用如何借助多模型聚合平台规避单点故障
  • 【限时开放】ChatGPT-Sora 2联合推理链搭建教程:含Prompt模板库、错误码速查表与延迟压测数据(仅存96小时)