题解:洛谷 P10188 [USACO24FEB] Milk Exchange B
本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】洛谷P10188 [USACO24FEB] Milk Exchange B - 洛谷【题目描述】Farmer John 的N NN1 ≤ N ≤ 2 ⋅ 10 5 1\le N\le 2\cdot 10^51≤N≤2⋅105头奶牛排成一圈使得对于1 , 2 , … , N − 1 1,2,\ldots,N−11,2,…,N−1中的每个i ii奶牛i ii右边的奶牛是奶牛i 1 i1i1而奶牛N NN右边的奶牛是奶牛1 11。第i ii头奶牛有一个容量为整数a i a_iai​1 ≤ a i ≤ 10 9 1\le a_i\le 10^91≤ai​≤109升的桶。所有桶初始时都是满的。每一分钟奶牛都会根据一个字符串s 1 s 2 … s N s_1s_2\ldots s_Ns1​s2​…sN​传递牛奶该字符串仅由字符L和R组成。当第i ii头奶牛至少有1 11升牛奶时如果s i L s_i\texttt{L}si​L她会将1 11升牛奶传递给她左边的奶牛如果s i R s_i\texttt Rsi​R则传递给右边的奶牛。所有交换同时发生即如果一头奶牛的桶是满的送出一升牛奶但也收到一升则她的牛奶量保持不变。如果此时一头奶牛的牛奶量超过a i a_iai​则多余的牛奶会损失。FJ 想要知道经过M MM分钟1 ≤ M ≤ 10 9 1\le M\le 10^91≤M≤109后所有奶牛总共还余下多少牛奶【输入】输入的第一行包含N NN和M MM。第二行包含一个字符串s 1 s 2 … s N s_1s_2\ldots s_Ns1​s2​…sN​仅由字符L或R组成表示每头奶牛传递牛奶的方向。第三行包含整数a 1 , a 2 , … , a N a_1,a_2,\ldots,a_Na1​,a2​,…,aN​为每个桶的容量。【输出】输出一个整数为M MM分钟后所有奶牛总共余下的牛奶量。注意这个问题涉及到的整数可能需要使用 64 位整数型例如C/C 中的long long。【输入样例】3 1 RRL 1 1 1【输出样例】2【核心思想】问题分析N NN头奶牛围成一圈每头奶牛有容量a i a_iai​的桶初始全满。每分钟所有奶牛同时按照方向字符串s ssL向左R向右传递 1 升牛奶若自己有奶同时可能收到 1 升。若某头牛收到后超过容量溢出损失。求经过M MM分钟M ≤ 10 9 M \le 10^9M≤109后所有桶中剩余牛奶总量。关键洞察由于传递是同时且同步的且每头牛每轮至多给出 1 升、收到 1 升因此只有方向模式中出现R后紧接L即RL的位置才会产生溢出。因为牛奶会沿R方向汇聚再沿L方向汇聚最终在RL交界处堆积并溢出。其余位置的牛奶只是在循环流动不会损失若首尾衔接的L...R模式则因为围成环会形成稳定流无净损失。因此只需找出所有RL交界点计算每个交界点在M MM分钟内损失的牛奶量从初始总量中扣除。算法选择模拟 数学不逐分钟模拟而是分析“溢出结构”。每个RL交界点奶牛i ii方向为R奶牛( i 1 ) m o d N (i1)\bmod N(i1)modN方向为L$会成为一个“汇点”左右两侧连续同向的奶牛会向该汇点输送牛奶。经过 $t$ 分钟从汇点左侧的连续R段和右侧的连续L段中每头牛会向汇点方向输送 $t$ 升牛奶但受限于自身容量。因此每个RL结构的溢出量为左侧连续R段所有奶牛的 $\min(a_j, M)$ 之和 右侧连续L段所有奶牛的 $\min(a_j, M)$ 之和再与 $M$ 取较小值因为每分钟该结构最多溢出 1 升。总损失为所有RL 结构损失之和。关键步骤基于代码逻辑读入N , M N, MN,M方向字符串s ss容量数组a i a_iai​。计算初始总量ans sum(a_i)。标记溢出结构遍历i ii从 0 到N − 1 N-1N−1若s [ i ] ′ R ′ s[i] Rs[i]′R′且s [ ( i 1 ) % N ] ′ L ′ s[(i1)\%N] Ls[(i1)%N]′L′则标记L[i] true该位置是结构起点即R的位置和R[(i1)%N] true该位置是结构终点即 L$ 的位置。计算每个结构的溢出损失若L[i] true即位置i ii是某个RL中的R则向左逆时针扫描连续R段累加该段所有奶牛的min ⁡ ( a j , M ) \min(a_j, M)min(aj​,M)到sum。若R[i] true$即位置 $i$ 是某个RL中的L则向右顺时针扫描连续L段累加该段所有奶牛的 $\min(a_j, M)$ 到sum。从ans中减去min(sum, (long long)M)因为每个结构每分钟最多溢出 1 升。输出ans。时间/空间复杂度时间复杂度O ( N ) O(N)O(N)线性扫描并处理连续段。空间复杂度O ( N ) O(N)O(N)存储数组和标记。模拟 数学的核心思想识别稳定流在环形排列中方向相同的连续段形成“流”。只有R段后接L段的位置RL边界会产生牛奶堆积和溢出因为牛奶从两侧流向该边界。相反L后接R的边界 (LR) 会产生分流不会溢出。每轮损失上限每个RL边界每分钟最多损失 1 升牛奶因为只有边界处的牛会收到来自两边的各 1 升而自身给出 1 升净增 1 升若已满则溢出 1 升。因此总损失 边界数 × 时间但受限于各段奶牛的总容量因为如果某段奶牛被掏空则不再有牛奶流向边界。处理容量限制对于左侧R段每头牛j jj在M MM分钟内最多贡献min ⁡ ( a j , M ) \min(a_j, M)min(aj​,M)升牛奶因为每分钟输出 1 升a j a_jaj​升后自桶空。右侧L段同理。因此边界可损失的总量为这些贡献之和与M MM取较小值。适用场景适用于环形同步传输、容量有限、问长时间后总量损失的模拟问题。核心是找出“汇聚点”并利用时间与容量的最小值计算损失。【解题思路】【算法标签】#普及 #数学【代码详解】#includebits/stdc.husingnamespacestd;intn,m;longlonga[200005],ans;string s;boolL[200005],R[200005];//L[i]true表示点i为某个溢出结构的起点//R[i]true表示点i为某个溢出结构的终点intmain(){cinnm;cins;for(inti0;in;i){cina[i];ansa[i];}//第一步从左到右找出字符串s中所有的溢出结构RL并标记其起点和终点for(inti0;in-1;i){if(s[i]Rs[(i1)%n]L){L[i]true;R[(i1)%n]true;}}//第二步从左到右计算每个溢出结构导致的牛奶溢出for(inti0;in;i){longlongsum0;// 每个溢出结构溢出的牛奶数量if(L[i]true){// i号桶为某个溢出结构的起点intj(i-1n)%n;// 记录i号桶左边的编号jwhile(s[j]R){suma[j];j(j-1n)%n;// 继续向左}}if(R[i]true){// i号桶为某个溢出结构的终点intj(i1)%n;// 记录i号桶右边的编号jwhile(s[j]L){suma[j];j(j1)%n;// 继续向右}}ans-min(sum,(longlong)m);}coutansendl;return0;}【运行结果】3 1 RRL 1 1 1 2

相关新闻

PDMS二次开发实战:PML脚本批量建模与管道属性处理教程

PDMS二次开发实战:PML脚本批量建模与管道属性处理教程

简介:这份资源面向化工、石油、制药等行业的三维工厂设计从业者,以及希望基于PDMS进行功能扩展的工程师与开发者,重点讲解如何利用内置脚本语言PML实现二次开发。内容涵盖PML语法基础,包括变量与数据类型、条件与循环控制结构、函…

2026/10/18 15:02:54 阅读更多 →
从零拆解订单簿撮合系统:C++满分源码实战解析

从零拆解订单簿撮合系统:C++满分源码实战解析

简介:面向软件开发求职者的微观博易项目一面试题完整解决方案,集中呈现满分作答思路与可运行代码,适合正在准备C方向技术面试、希望了解企业项目考核标准的人群。包内共有3个文件,压缩包仅1KB:一个C源文件实现核心功能…

2026/10/18 15:02:54 阅读更多 →
大模型API Key获取全攻略:控制台手动创建与编程式密钥管理

大模型API Key获取全攻略:控制台手动创建与编程式密钥管理

在AI时代,创作无限可能:获取大模型开放平台API Key的两种方式,开发者必看!如果你最近在折腾任何跟AI沾边的项目,八成绕不开一件事:去大模型开放平台申请一把API Key。不管是给博客接一个智能问答小助手&…

2026/10/18 15:02:54 阅读更多 →

最新新闻

2B参数视觉语言模型Youtu-Parsing:复杂文档解析新范式,替代传统OCR管道

2B参数视觉语言模型Youtu-Parsing:复杂文档解析新范式,替代传统OCR管道

文档解析这个赛道,这几年肉眼可见地热闹起来了。前几年大家还在用“OCR文字识别手工规则”硬啃版面,现在直接上视觉语言模型(VLM)来做端到端的文档解析,效果确实是一代一代在进步。最近我拿到了一套名为Youtu-Parsing的…

2026/10/18 17:45:45 阅读更多 →
MoE原理与负载均衡:稀疏大模型训练、推理成本优化实践

MoE原理与负载均衡:稀疏大模型训练、推理成本优化实践

说实话,第一次听说某个模型用上“混合专家”(MoE)时,我的第一反应是:这不就是集成学习换了个名字吗?多个专家凑在一起投票,怎么可能反而省算力?后来把相关论文和实现逐行看完&#x…

2026/10/18 17:45:45 阅读更多 →
SSM分诊系统:基于状态机的医疗资源调度实战

SSM分诊系统:基于状态机的医疗资源调度实战

简介:本资源是一套基于SSM框架(SpringSpringMVCMyBatis)开发的医院分诊管理信息系统完整源码,面向Java初学者与Web项目实践者,聚焦医疗场景下的分诊叫号、患者信息动态管理及科室配置等核心业务需求。压缩包含2000个文…

2026/10/18 17:45:45 阅读更多 →
约瑟夫环C语言实现:循环链表核心算法与调试指南

约瑟夫环C语言实现:循环链表核心算法与调试指南

约瑟夫环这道题,写过的同学都知道,说穿了就是循环链表加两个指针来回挪,但当初我为了把它调通,愣是在宿舍debug到凌晨。后来把“前驱指针”的思路理顺了,再回头看,其实这个题目考的就两件事:把环…

2026/10/18 17:45:45 阅读更多 →
AI日报:大模型推理成本下探与Agent长任务、量化部署实战观察

AI日报:大模型推理成本下探与Agent长任务、量化部署实战观察

今天是2026年10月11日,星期日。按理说周末不该谈工作,但AI这个圈子似乎从来没有“打烊”的概念——模型权重照样发新版本,开源仓库照样有人半夜提PR,评测集照样在刷新记录。我趁着下午把近期圈里值得看的东西捋了一遍,…

2026/10/18 17:45:45 阅读更多 →
降AI万能公式是伪命题?从AI检测原理到可复用改写框架的完整指南

降AI万能公式是伪命题?从AI检测原理到可复用改写框架的完整指南

“降AI万能公式”最近在内容创作圈子里热度很高,很多朋友私信问我:网上流传的那些“降AI提示词”“一键去AI味模板”到底有没有用?是不是真有那么一套万能公式,套进去就能让AI写的字变成“人写的”?我认真拆解过这些方…

2026/10/18 17:44:45 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →