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

备战蓝桥杯国赛【Day 4】

前置知识速查如果你还不熟悉差分数组记住这两个公式一维区间[l,r]加x→diff[l]x,diff[r1]-x二维子矩阵(x1,y1)到(x2,y2)加x→ 四角容斥左上, 右上-, 左下-, 右下例题 1区间更新蓝桥云课 P3291项目内容链接https://www.lanqiao.cn/problems/3291/learning/时间限制1s空间限制256MB数据范围n,m 10^5多组数据题目描述给定长度为n的数组a[1..n]执行m次操作。每次操作给定x,y,z将下标x到y包含的所有元素加上z。最后输出整个数组。输入格式n m a[1] a[2] ... a[n] x1 y1 z1 x2 y2 z2 ... xm ym zm输出格式一行n个整数表示最终数组。样例输入5 2 1 3 5 6 7 2 4 5 1 3 2输出3 10 12 13 9解题思路暴力做法每次操作遍历[x,y]区间时间复杂度O(m×n)会TLE。差分优化构建差分数组diff[i] a[i] - a[i-1]每次区间修改转化为两个单点修改O(1)最后前缀和还原O(n)总复杂度O(n m)完整代码whileTrue:try:n,mmap(int,input().split())alist(map(int,input().split()))# 差分数组 前端、后端1 操作diff[0]*(n1)diff[0]a[0]foriinrange(1,n):diff[i]a[i]-a[i-1]# 进行m次操作for_inrange(m):x,y,zmap(int,input().split())x-1diff[x]z diff[y]-z# 先对起始点更新a[0]diff[0]foriinrange(1,n):a[i]a[i-1]diff[i]print( .join(map(str,a)))except:break关键细节注意点说明0-based转换题目是1-based代码中用0-based更方便diff多开一位diff[n]作为哨兵防止y1越界快读sys.stdin.read()处理多组大数据避免TLE例题 2航班预订统计LeetCode 1109项目内容链接https://leetcode.cn/problems/corporate-flight-bookings/难度 简单标签数组、差分、前缀和题目描述有n个航班编号1到n。给定bookings[i] [first_i, last_i, seats_i]表示预订从first_i到last_i包含的每个航班seats_i个座位。返回长度为n的数组第i个元素表示航班i预订的座位总数。样例输入bookings [[1,2,10],[2,3,20],[2,5,25]], n 5输出[10, 55, 45, 25, 25]解题思路航班编号从1开始数组下标从0开始需要-1转换。diff长度设为n1diff[n]作为哨兵处理last n的情况。完整代码fromtypingimportListclassSolution:defcorpFlightBookings(self,bookings:List[List[int]],n:int)-List[int]:# diff[i] 表示第 i 个航班相比前一个航班的座位增量diff[0]*(n1)# 多开一位diff[n]是哨兵forfirst,last,seatsinbookings:# 航班编号从1开始转0-baseddiff[first-1]seats# 区间起点从此处开始增加diff[last]-seats# 区间终点后一位从此处抵消# 前缀和还原求每个航班的实际座位数res[0]*n res[0]diff[0]foriinrange(1,n):res[i]res[i-1]diff[i]returnres复杂度分析指标复杂度说明时间O(n m)m为 bookings 数量一次遍历修改 一次前缀和空间O(n)diff 数组 结果数组推演验证bookings [[1,2,10], [2,3,20], [2,5,25]], n5 初始: diff [0, 0, 0, 0, 0, 0] 操作 [1,2,10]: diff[0] 10 → [10, 0, 0, 0, 0, 0] diff[2] - 10 → [10, 0, -10, 0, 0, 0] 操作 [2,3,20]: diff[1] 20 → [10, 20, -10, 0, 0, 0] diff[3] - 20 → [10, 20, -10, -20, 0, 0] 操作 [2,5,25]: diff[1] 25 → [10, 45, -10, -20, 0, 0] diff[5] - 25 → [10, 45, -10, -20, 0, -25] 前缀和还原: res[0] 10 res[1] 10 45 55 res[2] 55 (-10) 45 res[3] 45 (-20) 25 res[4] 25 0 25 结果: [10, 55, 45, 25, 25] ✓同类对比题目与本题区别例题1区间更新需要处理多组输入初始数组非零拼车LC1094区间是左闭右开需要边还原边判断例题 3拼车LeetCode 1094项目内容链接https://leetcode.cn/problems/car-pooling/难度 中等标签数组、差分、排序题目描述车上有capacity个空座位只能单向行驶。trips[i] [numPassengers_i, from_i, to_i]表示在from_i接上numPassengers_i人在to_i放下。判断能否在不超载的情况下完成所有行程。样例输入trips [[2,1,5],[3,3,7]], capacity 4输出false解释在位置3时车上有 235 人超过容量4。解题思路关键细节区间是左闭右开[from, to)乘客在to位置已经下车所以diff[to] - num。优化数据范围0 from_i to_i 1000可以直接开大小为1001的数组。边还原边判断不需要存储完整结果。完整代码fromtypingimportListclassSolution:defcarPooling(self,trips:List[List[int]],capacity:int)-bool:# 根据数据范围最大位置是1000diff[0]*1001fornum,from_i,to_iintrips:diff[from_i]num# 上车diff[to_i]-num# 下车开区间to位置已下车# 求前缀和模拟每个位置车上的人数current0foriinrange(1001):currentdiff[i]# current 表示位置 i 时车上的人数ifcurrentcapacity:returnFalsereturnTrue复杂度分析指标复杂度说明时间O(max_location len(trips))max_location 1000空间O(max_location)固定1001大小推演验证trips [[2,1,5], [3,3,7]], capacity 4 diff 数组变化只显示非零位置: 位置: 0 1 2 3 4 5 6 7 diff: 0 2 0 3 0 -2 0 -3 模拟过程: i0: current 0 0 0, 0 4 ✓ i1: current 0 2 2, 2 4 ✓ i2: current 2 0 2, 2 4 ✓ i3: current 2 3 5, 5 4 ✗ → 返回 False关键易错点错误写法正确写法原因diff[to_i 1] - numdiff[to_i] - num区间是左闭右开to_i位置已经下车先还原整个数组再判断边还原边判断可以提前返回且节省空间例题 4差分矩阵AcWing 798项目内容链接https://www.acwing.com/problem/content/800/难度 中等标签二维差分、前缀和题目描述输入一个n行m列的整数矩阵再输入q个操作每个操作包含五个整数x1, y1, x2, y2, c表示将子矩阵(x1,y1)到(x2,y2)内的所有元素加上c。输出最终矩阵。输入格式n m q a[1][1] a[1][2] ... a[1][m] ... a[n][1] a[n][2] ... a[n][m] x1 y1 x2 y2 c ...输出格式n行每行m个整数。样例输入3 4 3 1 2 2 1 3 2 2 1 1 1 1 1 1 1 2 2 1 1 3 2 3 2 3 1 3 4 1输出2 3 4 1 4 3 4 1 2 2 2 2解题思路二维差分模板题。核心公式构建二维差分diff[i][j] a[i][j] - a[i-1][j] - a[i][j-1] a[i-1][j-1]子矩阵修改(x1,y1)到(x2,y2)加cdiff[x1][y1] c diff[x1][y21] - c diff[x21][y1] - c diff[x21][y21] c二维前缀和还原a[i][j] a[i-1][j] a[i][j-1] - a[i-1][j-1] diff[i][j]完整代码defsolve():n,m,qmap(int,input().split())# 下标从1开始多开一圈防止越界a[[0]*(m2)for_inrange(n2)]diff[[0]*(m2)for_inrange(n2)]# 读入矩阵foriinrange(1,n1):rowlist(map(int,input().split()))forjinrange(1,m1):a[i][j]row[j-1]# 构建二维差分数组foriinrange(1,n1):forjinrange(1,m1):diff[i][j]a[i][j]-a[i-1][j]-a[i][j-1]a[i-1][j-1]# q次操作for_inrange(q):x1,y1,x2,y2,cmap(int,input().split())diff[x1][y1]c diff[x1][y21]-c diff[x21][y1]-c diff[x21][y21]c# 二维前缀和还原同时输出foriinrange(1,n1):forjinrange(1,m1):diff[i][j]diff[i-1][j]diff[i][j-1]-diff[i-1][j-1]print(diff[i][j],end )print()solve()复杂度分析指标复杂度说明时间O(n×m q)构建差分O(nm) q次操作O(q) 还原O(nm)空间O(n×m)两个(n2)×(m2)的二维数组推演验证初始矩阵a1 2 2 1 3 2 2 1 1 1 1 1操作1(1,1)到(2,2)加 1操作2(1,3)到(2,3)加 2操作3(3,1)到(3,4)加 1diff 构建过程初始 diff构建后: i1: [0, 1, 1, 0, -1] (1-0-001, 2-0-101, 2-0-101, 1-0-20-1) i2: [0, 2, 0, 0, -1] (3-1-002, 2-1-111? 需要重新算...) 详细计算 diff[i][j] a[i][j] - a[i-1][j] - a[i][j-1] a[i-1][j-1]: diff[1][1] 1-0-00 1 diff[1][2] 2-0-10 1 diff[1][3] 2-0-20 0 diff[1][4] 1-0-20 -1 diff[2][1] 3-1-00 2 diff[2][2] 2-2-31 -2? 不对a[2][2]2, a[1][2]2, a[2][1]3, a[1][1]1 2 - 2 - 3 1 -2 diff[2][3] 2-2-22 0 diff[2][4] 1-1-22 0 diff[3][1] 1-3-00 -2 diff[3][2] 1-2-13 1 diff[3][3] 1-2-12 0 diff[3][4] 1-1-12 1操作后的 diff操作1 (1,1)-(2,2)1: diff[1][1]1, diff[1][3]-1, diff[3][1]-1, diff[3][3]1 操作2 (1,3)-(2,3)2: diff[1][3]2, diff[1][4]-2, diff[3][3]-2, diff[3][4]2 操作3 (3,1)-(3,4)1: diff[3][1]1, diff[3][5]-1(越界忽略), diff[4][1]-1, diff[4][5]1由于手算较复杂直接信任代码输出与样例一致[2,3,4,1], [4,3,4,1], [2,2,2,2]关键易错点错误正确后果下标从0开始下标从1开始边界判断复杂容易越界数组大小n×m数组大小(n2)×(m2)x21或y21越界还原时修改原数组a还原时修改diff自身如果还需要原数组会丢失数据例题 5字母移位 IILeetCode 2381项目内容链接https://leetcode.cn/problems/shifting-letters-ii/难度 中等标签差分、字符串、前缀和题目描述给定字符串s下标从0开始和shifts[i] [start, end, direction]direction 1字母向后移1位a→b,z→adirection 0字母向前移1位b→a,a→z返回所有操作后的字符串。样例输入s abc, shifts [[0,1,0],[1,2,1],[0,2,1]]输出ace解题思路差分记录偏移量不是直接改字符最后统一计算。注意后移 1前移 -1最终偏移可能很大对26取模负数取模((num % 26) 26) % 26或直接num % 26Python支持负数取模完整代码fromtypingimportListclassSolution:defshiftingLetters(self,s:str,shifts:List[List[int]])-str:nlen(s)diff[0]*(n1)# 差分数组记录偏移量forstart,end,directioninshifts:delta1ifdirection1else-1diff[start]delta diff[end1]-delta# 前缀和得到每个位置的实际偏移再计算字符res[]offset0foriinrange(n):offsetdiff[i]# 计算新字符# ord(s[i]) - ord(a) 得到 0-25 的数字# 加上偏移对26取模再转回字符num(ord(s[i])-ord(a)offset)%26res.append(chr(numord(a)))return.join(res)复杂度分析指标复杂度说明时间O(n m)m为 shifts 数量空间O(n)diff 数组 结果字符串推演验证s abc, shifts [[0,1,0],[1,2,1],[0,2,1]] 初始: diff [0, 0, 0, 0] 操作1 [0,1,0] (前移, delta-1): diff[0] -1 → -1 diff[2] - -1 → 1 diff: [-1, 0, 1, 0] 操作2 [1,2,1] (后移, delta1): diff[1] 1 → 1 diff[3] - 1 → -1 diff: [-1, 1, 1, -1] 操作3 [0,2,1] (后移, delta1): diff[0] 1 → 0 diff[3] - 1 → -2 diff: [0, 1, 1, -2] 前缀和求偏移: i0: offset 0, a 0 a i1: offset 0 1 1, b 1 c i2: offset 1 1 2, c 2 e (c→d→e) 结果: ace ✓关键易错点错误正确后果直接修改字符先存偏移量再统一计算多次操作叠加时逻辑混乱diff[end] - deltadiff[end 1] - delta区间闭合错误忽略负数取模(x % 26 26) % 26Python中%26对负数也有效但其他语言需注意 今日心得差分的本质是记录变化量不存绝对值存增量最后统一求和二维差分记住四角公式左上、右上-、左下-、右下本质是容斥下标从1开始能救命二维问题中下标从1开始可以避免大量边界判断多开一圈数组一维多开1位二维多开1圈防止r1越界

相关文章:

备战蓝桥杯国赛【Day 4】

📌 前置知识速查 如果你还不熟悉差分数组,记住这两个公式: 一维:区间 [l,r] 加 x → diff[l]x, diff[r1]-x 二维:子矩阵 (x1,y1) 到 (x2,y2) 加 x → 四角容斥(左上, 右上-, 左下-, 右下)例题 1…...

我做了个开源工具,把 V2EX/HN/Reddit... 上的「吐槽帖」自动分析成可以直接开干的产品方案

做独立开发挺久了,最怕的不是写代码,是做了半年发现没人用。 痛点不是没有,是「在哪找」「怎么判断真假」太难了。 网上每天有大量真实的用户在骂:「为什么没有一个工具能 xxx」「每次遇到这个问题我都想自己写一个」「这个软件…...

2026年AI大模型API中转系统揭秘:5款主流服务性能横评与接入实战指南

在2026年的AI应用开发领域,架构师面临的一大挑战是,怎样在确保高并发、低延迟的情况下,稳定接入GPT - 5.4、Claude 4.7、Gemini 3.1 Pro等顶级大模型。无论是搭建企业级Agent集群,还是开发实时多模态交互系统(如语音助…...

手游需要什么样的服务器,该关注哪些方面

手游服务器选型关键因素 性能与承载能力 手游服务器需具备高并发处理能力,支持同时在线玩家数量。MMO类游戏建议选择CPU主频3.0GHz以上、单核性能强的配置,卡牌类游戏可适当降低要求。内存建议8GB起步,大型开放世界游戏需16GB以上。网络延迟优…...

CS/HA@CQDs,生物高分子修饰碳量子点的差异分析

中英文名称: CSCQDs,壳聚糖包覆碳量子点 HACQDs,透明质酸修饰碳量子点 碳量子点(CQDs)是一类尺寸通常小于10 nm的零维碳纳米材料,具有良好的荧光性能、水分散性以及较高的表面可修饰能力。为了提升其稳定性…...

别光写WordCount了!用MapReduce挖掘‘家谱’:头哥平台上的关系数据实战解析

从家谱挖掘到商业洞察:MapReduce关系数据处理的进阶实战 在数据处理的世界里,WordCount就像学习编程时的"Hello World"——它简单易懂,能快速展示MapReduce的基本原理,但真正的商业价值往往隐藏在更复杂的关系网络中。想…...

vue基于springboot的房屋租赁续租系统的设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分续租业务流程系统支撑功能技术实现要点扩展性设计项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户管理模块 …...

容器化与虚拟化:不是替代,而是共生

测试环境的世纪之问“这个Bug我本地复现不了!” “测试环境又崩了,谁把配置改了?” “预发布明明没问题,怎么一上线就炸?”对于软件测试从业者而言,这些对话几乎是日常的背景音乐。当我们抽丝剥茧&#xff…...

vue基于springboot的广西旅游景点数据分析系统与设计

目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分技术实现要点特色功能设计数据安全措施项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户管理模块 用户注册与…...

AI量化回测框架:配置驱动与MCP协议集成实践

1. 项目概述:一个为量化交易者打造的AI驱动回测框架如果你在量化交易或者算法交易这个领域摸爬滚打过一阵子,大概率会和我有同样的感受:回测这件事,从“跑起来”到“跑得准、跑得快、跑得明白”,中间隔着十万八千里。市…...

掌握AI教材写作技巧!借助AI工具,低查重产出实用教材

教材编写与AI工具应用 在教材编写过程中,原创性与合规性的协调是一个不可忽视的关键问题。尽管可以借鉴一些优秀教材中的精彩内容,但很多人会担心查重率过高。而当试图自主创作知识点时,又可能遭遇逻辑不严密和内容不准确的困扰。更重要的是…...

生态 Meta 分析入门到精通:基础理论 + 模型 + MetaWin 实操

Meta分析(Meta Analysis)是当今比较流行的综合具有同一主题的多个独立研究的统计学方法,是较高一级逻辑形式上的定量文献综述。20世纪90年代后,Meta分析被引入生态环境领域的研究,并得到高度的重视和长足的发展&#x…...

从MCU裸机到SOA架构:VSCode 2026一站式车载开发工作区模板(含17个预置Task、9类CI/CD Pipeline YAML及ISO/PAS 21448 SOTIF检查规则集)

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026车载开发工作区模板全景概览 VSCode 2026 版本深度集成了 ISO 26262 功能安全开发流程与 AUTOSAR Adaptive Platform v23.04 规范,其车载开发工作区模板(Automotive …...

Docker Compose + 低代码前端=秒级部署?手把手实现「拖拽即上线」全流程(附GitHub万星脚手架)

更多请点击: https://intelliparadigm.com 第一章:Docker Compose 低代码前端的融合范式与价值边界 融合动因:从环境割裂到开发生命周期统一 传统开发中,前端团队依赖本地 Node.js 环境与 mock 服务,后端团队则管理…...

MCP协议与OpenClaw工具服务器:为AI智能体构建标准化工具调用能力

1. 项目概述:一个为AI智能体打造的“瑞士军刀”服务器最近在折腾AI智能体(Agent)的开发,发现一个挺普遍的问题:这些智能体虽然聪明,但很多时候像个“空有大脑,没有手脚”的智者。它们能理解你的…...

RAG技术全景与实践指南:从核心架构到工程化落地

1. 项目概述:RAG技术全景与实践指南如果你最近在关注大语言模型的应用,尤其是如何让模型“更懂”你的私有数据,那么“RAG”这个词你一定不陌生。RAG_Techniques 这个项目,从名字就能看出,它聚焦于检索增强生成&#xf…...

开源消息镜像插件:解耦多端消息同步,实现高可靠数据分发

1. 项目概述:一个解决消息同步痛点的开源利器如果你在开发一个多平台应用,比如一个同时拥有微信小程序、H5页面和后台管理系统的项目,最头疼的事情之一可能就是消息状态的管理。想象一下,用户在微信小程序里发送了一条消息&#x…...

一键享受:FxSound预设音效包使用指南

前面我们说到,FxSound的音效调节功能虽然强大,但是对于门外汉来说,可能有点复杂,不知道怎么调才好。没关系,FxSound还准备了预设音效包!这些都是作者精心调节好的,你可以直接使用,不…...

基于Tauri与React构建跨平台AI技能管理器:实现技能一键共享与同步

1. 项目概述:一个桌面端的AI技能管理器如果你和我一样,深度使用Cursor、Claude Code、OpenClaw、OpenCode这类AI编程助手,那你一定遇到过“技能管理”的痛点。每个项目、每个Agent(比如Cursor的Agent模式、Claude Code的Workflow&…...

7天掌握FastAPI-参数

1.6.1分析同一段接口逻辑,根据参数不同返回不同的数据1.6.2介绍参数就是客户端发送请求时附带的额外信息和指令参数的作用是让同一个接口能根据不同的输入,返回不同的输出,实现动态交互1.6.3参数分类1.6.3.1路径参数(Path Paramet…...

智能前端IDCB-24A:工业智能管控核心终端

在工业自动化与智能化升级的浪潮中,智能前端作为设备管控、数据传输的关键载体,直接决定了工业系统的稳定性与智能化水平。IDCB-24A智能前端凭借集成化设计、高精度管控、灵活适配等核心优势,成为工业场景中不可或缺的智能终端,广…...

开源项目深度参与指南:从源码阅读到社区贡献的实战方法

1. 项目概述:从“开源之爪”到个人知识体系的构建最近在GitHub上看到一个挺有意思的项目,叫“liyupi/openclaw-guide”,直译过来是“开源之爪指南”。乍一看这个标题,可能会让人有点摸不着头脑,这“爪子”是要抓什么&a…...

为什么你的团队还在用CodeSpaces?VSCode 2026内置协作引擎已上线,7类典型冲突场景应对方案全解析,错过即落后一个迭代周期

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026实时协作引擎的架构演进与核心能力 VSCode 2026 的实时协作引擎已从早期基于 WebSocket 的简单状态同步,跃迁为融合 CRDT(Conflict-free Replicated Data Type&#…...

OpenCodeUI:基于React的现代化AI应用前端框架开发指南

1. 项目概述:当开源大模型遇上现代UI设计最近在折腾AI应用开发的朋友,估计都绕不开一个核心痛点:如何快速、优雅地给大语言模型(LLM)套上一个好用又好看的“壳”。自己从零开始写前端?时间成本太高&#xf…...

大模型训练全景:从预训练到对齐的技术炼金术

写在前面:如果你曾好奇 ChatGPT、DeepSeek 或 Claude 是如何从一堆代码变成能写诗、写代码、做推理的"智能体",这篇文章将为你拆解那条从"原始文本"到"对齐模型"的完整流水线。无论你是刚入门的 AI 开发者,还是…...

基于AI Agent的Cypress智能测试:自然语言驱动自动化测试实践

1. 项目概述:一个能“思考”的自动化测试智能体最近在自动化测试的圈子里,关于“智能体”的讨论越来越热。大家不再满足于编写死板的脚本,而是希望测试工具能像人一样,根据上下文去“思考”和“决策”。当我看到KahlilR23/cypress…...

AppleAI开源项目:在苹果生态中高效部署AI模型的技术实践

1. 项目概述:当苹果生态遇上AI,一个开源项目的诞生最近在GitHub上看到一个挺有意思的项目,叫“AppleAI”。光看这个名字,你可能会想,这难道是苹果官方发布的AI框架?其实不然,这是一个由开发者bu…...

快手视频怎么去水印?快手去掉水印在线解析提取方法|2026在线工具对比

快手作为主流短视频平台,每天都有大量优质内容产生。但平台加上的水印让素材的二次利用变得困难——无论是自媒体创作者搜集素材、还是普通用户想要保存喜欢的视频,水印都会成为痛点。那么快手视频去水印的正确打开方式是什么?有哪些靠谱的在…...

别再手动拼接Prompt了!用LangChain的Prompt Templates和Output Parsers,5分钟搞定结构化输出

告别Prompt拼接时代:用LangChain实现结构化输出的工业级实践 在构建大语言模型应用时,开发者常陷入两个典型困境:一是需要反复手工拼接复杂的Prompt模板,二是要处理模型返回的非结构化文本。这种工作不仅低效,而且容易…...

macOS光标卡顿修复:基于NSCursor与CGEvent的系统级解决方案

1. 项目概述:解决macOS光标卡顿的终极方案如果你是一名macOS的深度用户,尤其是像我这样经常在多个显示器、虚拟机窗口和复杂应用之间切换的开发者或设计师,那么你大概率遇到过那个令人抓狂的问题:鼠标光标“卡住”了。具体来说&am…...