洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

发布时间:2026/10/26 13:04:20

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表 【题目来源】https://www.luogu.com.cn/problem/P7912【题目描述】小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里具体方法是每次都把每一个“块”中最左边的水果同时挑出组成一个果篮。重复这一操作直至水果用完。注意每次挑完一个果篮后“块”可能会发生变化。比如两个苹果“块”之间的唯一桔子被挑走后两个苹果“块”就变成了一个“块”。请帮小熊计算每个果篮里包含的水果。【输入格式】第一行包含一个正整数 n表示水果的数量。第二行包含 n 个空格分隔的整数其中第 i 个数表示编号为 i 的水果的种类1 代表苹果0 代表桔子。​​​​​​​【输出格式】输出若干行。第 i 行表示第 i 次挑出的水果组成的果篮。从小到大排序输出该果篮中所有水果的编号每两个编号之间用一个空格分隔。​​​​​​​【输入样例】121 1 0 0 1 1 1 0 1 1 0 0【输出样例】1 3 5 8 9 112 4 6 12710【数据范围】对于 10% 的数据n≤5。对于 30% 的数据n≤1000。对于 70% 的数据n≤50000。对于 100% 的数据1≤n≤2×10^5。【算法分析】● 由于数据规模较大建议 C/C 选手使用 scanf 和 printf 语句输入、输出。​​​​​​​●​​​​​​​ 高效地删除元素并合并相邻块双向链表是最合适的数据结构。●​​​​​​​ it fruits.erase(it) 整体作用等价于1. 删除 it 指向的元素2. 让 it 指向被删元素的下一个元素。---每次都把每一个“块”中最左边的水果同时挑出即从块中删除元素。● 若用 STL list 模拟会有 3 个样例超时TLE。问题出在 STL list 的 erase 操作上。虽然 list 的 erase 是 O(1)但每一轮都需要遍历整个链表而且每次删除都会导致大量迭代器移动。​​​​​​​如下是 70 分代码3 个 TLE。#include bits/stdc.h using namespace std; /* Use a list to store fruits, with each element being a pair of type,number */ listpairint,int fruits; int main() { int n; scanf(%d,n); for(int i1; in; i) { int type; scanf(%d,type); fruits.push_back({type,i}); } vectorvectorint ans; while(!fruits.empty()) { vectorint block; int last_type-1; /* Traverse the linked list and extract the leftmost element of each block */ auto itfruits.begin(); while(it!fruits.end()) { if(it-first!last_type) { block.push_back(it-second); last_typeit-first; itfruits.erase(it); } else { last_typeit-first; it; } } sort(block.begin(),block.end()); ans.push_back(block); } for(auto block:ans) { for(int i0; iblock.size(); i) { printf(%d ,block[i]); } printf(\n); } return 0; } /* in: 12 1 1 0 0 1 1 1 0 1 1 0 0 out: 1 3 5 8 9 11 2 4 6 12 7 10 */【算法代码】#include bits/stdc.h using namespace std; const int N2e55; int ans[N],le[N],ri[N],a[N]; int n,len,z,y; int main() { cinn; a[0]a[n1]-1; for(int i1; in; i) { scanf(%d,a[i]); le[i]i-1,ri[i]i1; if(a[i]!a[i-1]) { ans[len]i; } } while(len) { int t0; for(int i1; ilen; i) { printf(%d ,ans[i]); zle[ans[i]],yri[ans[i]]; le[y]z,ri[z]y; if(a[ans[i]]a[y] a[z]!a[y]) ans[t]y; } lent; coutendl; } return 0; } /* in: 12 1 1 0 0 1 1 1 0 1 1 0 0 out: 1 3 5 8 9 11 2 4 6 12 7 10 */【参考文献】https://blog.csdn.net/acker007/article/details/135043572https://www.luogu.com.cn/problem/solution/P7912https://blog.csdn.net/joseph0530/article/details/132946346
延伸阅读

更多相关文章

2026/10/23 22:00:16

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

2026/10/25 7:38:50

Qobuz无损音乐下载实战指南:QobuzDownloaderX-MOD 搭建与整理

Qobuz无损音乐下载实战指南:QobuzDownloaderX-MOD 搭建与整理 【免费下载链接】QobuzDownloaderX-MOD Downloads streams directly from Qobuz. Experimental refactoring of QobuzDownloaderX by AiiR 项目地址: https://gitcode.com/gh_mirrors/qo/QobuzDownloa…

2026/10/25 7:38:18

上海家电维修疏通防水补漏一站式服务-欧米到家规范上门检修

前言在上海这座超一线城市,居家生活与商业办公都高度依赖各类家电设备,小到冰箱、洗衣机、燃气灶,大到中央空调、壁挂炉、商用制冷设备,一旦突发故障,会直接打乱生活节奏、影响办公经营。与此同时,马桶地漏…

2026/10/26 13:03:25

C++信号处理类设计:采样、滤波、FFT与峰值检测实践

简介:面向C开发者与系统编程学习者的信号处理封装类代码,聚焦进程如何响应操作系统信号,并给出可复用的处理入口与生命周期管理思路。压缩包共2个文件,以1个头文件和1个实现文件为主,分别承载类接口声明与具体逻辑&…

2026/10/26 13:03:25

AI写GPU内核:6.6倍加速为何端到端只剩1.25倍?

1. 这场实验是怎么开始的:让 AI 接管 GPU 内核优化 1.1 基线数据才是整个账本的第一行 上个季度我给某个图像处理链路过内核,调优对象是一段运行在 GPU 上的图像预处理算子,主要做缩放、归一化、色彩空间转换,外加一轮 3x3 卷积。…

2026/10/26 13:03:25

机械化人眼:一种基于元认知校准的AI幻觉实时识别框架

1. 项目概述:这不是一个“检测器”,而是一次对AI幻觉的临床解剖“机械化人眼”——这个标题里没有一个技术术语,但每个字都在刺向当前大模型应用最痛的软肋:它不判断真假,只追求流畅。我们做的不是给AI加个“测谎仪”&…

2026/10/26 13:03:25

GPU内核加速6.6倍,端到端只有1.25倍:性能优化账本拆解

把一段 4K 视频帧的 RGB 图像预处理 CUDA 内核丢给 AI 重写,跑完基准测试后,屏幕上出现了两组反差极大的数字:内核执行时间快了 6.6 倍,但整条链路端到端只快了 1.25 倍。先别急着下结论,这个反差恰恰是 GPU 优化里最值…

2026/10/26 12:58:24

AI芯片选型避坑指南:读懂TOPS、能效比与带宽的真实含义

1. 这不是参数表,是AI芯片的“体检报告单” 你手头那张标着“算力XX TOPS”“能效比YY W/TOPS”的芯片参数页,真能当采购依据用?我见过太多团队拿着这张纸就拍板下单,结果模型一跑起来,显存爆了、温度飙到95℃、推理延…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑