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

P2564 生日礼物题解复盘

P2564 生日礼物题解

基本信息

项目内容
题目编号、来源P2564 洛谷
训练层级B 排序 + 滑动窗口
知识版块排序、双指针、滑动窗口、哈希

解题前・关键信号识别

维度分析
目标、约束、底层结构目标:从所有彩珠中找一个最短区间,包含全部 K 种颜色;约束:N ≤ 1e6,K ≤ 60;底层结构:先将所有珠子按位置排序,然后用双指针维护滑动窗口,用 id[color] 记录每种颜色最后一次出现的位置。
数据规模N ≤ 1e6,O(N log N) 排序 + O(N) 滑动窗口,可通过。
候选算法和依据排序 + 滑动窗口;依据:需要找包含所有种类的最短区间,P1638 逛画展的升级版(位置不连续,需要先排序)。
复杂度预判排序 O(N log N),滑动窗口 O(N),总 O(N log N);空间 O(N)。

解题后・外化复盘

维度内容
实现结构 / 核心思路第一步将每种颜色的所有位置读入结构体数组 (pos, color),按 pos 升序排序;第二步用滑动窗口 [head, i] 维护当前区间,id[color] 记录该颜色最后一次出现的位置;第三步右指针 i 不断右移,更新 id;第四步左指针 head 跳过所有“不是该颜色最后一次出现”的旧位置;第五步当 cnt == K(所有颜色都出现过)时,用当前右端点位置减去左端点位置更新答案。
错因回溯1. 排序函数写错:sort(f+1, f+1+n)缺少 cmp,应写sort(f+1, f+n+1, cmp);2. 读入顺序正确但注意每种颜色的位置是升序给出的。
边界和易错点1. 多个珠子可以在同一位置,排序后相邻;2. id 数组用 -1 初始化,因为位置可以是 0;3. 左指针跳过条件是id[f[head].val] != f[head].pos,即当前位置不是该颜色的最新位置;4. K ≤ 60,id 数组开 65 即可;5. N ≤ 1e6,用 scanf 或 ios::sync_with_stdio(false) 加速。
下次看到什么信号,我应该想到这个方法看到「包含全部种类 + 最短区间 + 位置不连续」,排序后滑动窗口,用 id 记录每种元素最后一次出现位置。

AC 完整代码

#include<iostream>#include<algorithm>#include<cstring>#include<queue>#include<vector>usingnamespacestd;constintmaxn=1000005;intid[65];inttot=0;intlen=0x3f3f3f3f;structnode{intpos;intval;}f[maxn];boolcmp(node a,node b){returna.pos<b.pos;}intmain(){memset(id,-1,sizeof(id));intn,k,t;cin>>n>>k;for(inti=1;i<=k;i++){cin>>t;for(intj=1;j<=t;j++){tot++;cin>>f[tot].pos;f[tot].val=i;}}sort(f+1,f+1+n,cmp);inthead=1,cnt=0;for(inti=1;i<=n;i++){if(id[f[i].val]==-1){cnt++;}id[f[i].val]=f[i].pos;while(head<=i&&id[f[head].val]!=f[head].pos){head++;}if(cnt==k){len=min(len,f[i].pos-f[head].pos);}}cout<<len;return0;}
http://www.jsqmd.com/news/1216570/

相关文章:

  • Vercel 绑定自定义域名极简配置指南
  • 卡地亚中国官方售后服务中心|官方电话及服务网点地址权威信息通知(2026年7月最新) - 卡地亚服务中心
  • AM62L硬件防火墙配置实战:从寄存器解析到安全内存保护
  • 数据结构——动态规划进阶:最长递增子序列、编辑距离
  • JavaScript 数组核心方法实战|新增元素 + 数组转字符串 零基础详解
  • Android线程模型与UI更新机制详解
  • Kimi LeetCode 3620. 恢复网络路径 Python3实现
  • 2026年中西安专业废铝回收厂商盘点:矗立鼎盛物资回收解析 - 品牌鉴赏官2026
  • 2026筛选浙江化学镍工厂合作方 可综合多维度考量适配性 - 奔跑123
  • SpringBoot 整合 JWT——Token 认证与自动刷新
  • 2026宁波本地工业气体服务商选购维度评测汇总 - 奔跑123
  • FTP 服务器挂载成本地磁盘盘符
  • 2026惠州GEO搜索优化正规服务机构实力排行汇总 - 奔跑123
  • Linux Shell编程实战:需求驱动与自动化测试
  • AM62L硬件防火墙配置实战:从寄存器解析到嵌入式系统安全设计
  • JS三种引入方式详解|行内JS、内部JS、外部JS 优缺点全面对比
  • 亲身到店探访合肥亨得利官方名表服务中心|全新维修地址和售后服务电话(2026年7月更新) - 亨得利官方
  • puzzle(1022)数图、彩色数图、字母沙拉
  • AI 电动窗帘电机智能功率 MOSFET 覆盖电机驱动、电源管理、控制逻辑的完整选型方案
  • 2026武汉网站建设公司哪家好 行业口碑排行盘点 - 奔跑123
  • 天梭中国官方售后服务中心|服务热线及全部维修详细地址权威信息声明(2026年7月更新) - 天梭服务中心
  • Python 数据清洗实战——缺失值、异常值、重复值处理
  • Rust AI 工具发布为单二进制:静态链接把一切装进一个文件的技术要点
  • 2026西安全日制综合职业高中最新排行榜单梳理 - 奔跑123
  • 2026行业交流场景下浙江塑料切粒机厂家哪家好解读 - 奔跑123
  • 2024年SAP实用网站资源大全与开发指南
  • 嵌入式GPMC配置实战:地址解码、WAIT引脚与总线时序优化
  • AI 辅助前端性能瓶颈定位:从 Lighthouse 报告到代码级根因分析
  • 亨得利钟表服务中心维修地址与24小时热线实地考察报告+多信源验证(2026年七月最新) - 亨得利官方博客
  • 鸿蒙 ArkTS 实战:Knowledge Card Generator 从智能助手到保存闭环完整解析