P6625 [省选联考 2020 B 卷] 卡牌游戏

前缀和、差分比赛4题 本文分享了四道算法题的解题思路和代码实现: 水壶问题:通过前缀和计算连续k+1个水壶的水量之和,取最大值。注意数据范围使用long long。 二维前缀和模板:利用二维前缀和公式快速查询子矩阵和,注意处理边界条件。 语文成绩差分:使用差分数组实现区间加减,最后求最小值时需还原原始数组。 卡牌游戏:通过前缀和计算所有可能的分段和,累加正数部分作为最大得分,特别注意数据范围需使用long long。 各题均强调数据范围的重要性,避免整型溢出。解题思路主要围绕前缀和、差分等基础算法展开,通过预 阅读详情

记录149

#include<bits/stdc++.h>
using namespace std;
#define ll long long // 数据范围到10^5,累加后可能爆int,必须开long long
int main() {
    ios::sync_with_stdio(false); // 加速IO
    cin.tie(0);
    int n;
    cin>>n;
    ll sum=0,ans=0,a;
    for (int i=1;i<=n;i++) {
        cin>>a;
        sum+=a; // 实时计算前缀和
        // 只有前缀和大于0,且不是第一张牌(至少合并2张)时,才加入总分
        if (i!=1&&sum>0) ans+=sum;
    }
    cout<<ans<<"\n";
    return 0;
}

题目传送门https://www.luogu.com.cn/problem/P6625


前言

我是一名专注信奥赛(CSP-J/S、NOIP)的教练。

  • 如果你觉得这篇题解对你有帮助,欢迎点击关注我的优快云账号,我会持续更新高质量算法解析。
  • 我深知算法思维的构建远比单纯通过题目更重要,本系列题解不局限于AC代码的堆砌,而是致力于拆解题目背后的逻辑链条与核心知识点
  • 备赛路上若遇瓶颈,欢迎随时评论或私信,我将甄选典型疑难问题,通过视频讲解或撰写专项文章的形式,为你提供深度答疑。

 核心解题思路

这道题是一道非常经典的贪心算法与前缀和结合的问题。

  1. 问题转化(前缀和视角):
    题目要求我们每次选取“最左边的连续若干张卡牌”进行合并。这意味着,无论我们怎么操作,本质上都是在不断地选取数组的前缀。
    假设我们第一次合并了前 i 张卡牌,那么这次操作对总分的贡献就是前 i 张卡牌的和(即前缀和 Si​ )。合并后,这 i 张卡牌变成了一张分值为 Si​ 的新卡牌,位于最左端。
    如果我们接下来继续合并前 j 张卡牌(包含刚才合并出的那张新卡牌),这次操作对总分的贡献,本质上就是原数组前 j 张卡牌的和(即前缀和 Sj​ )。
    因此,整个游戏过程的总分,实际上就是我们选取的若干个“前缀和”的累加。

  2. 算法设计(贪心策略):
    既然总分等于我们选出的前缀和之和,为了让总分最大,我们只需要遵循一个简单的贪心原则:只要当前的前缀和是正数,我们就把它合并进来! 因为正数会让总分变大。如果当前的前缀和是负数或零,合并它只会让总分不变或减少,我们就应该立刻停止游戏。
    注意题目限制“至少合并2张卡牌”,所以我们从第2张卡牌开始判断前缀和是否为正。


 代码分块详细解释

1. 头文件与变量定义

#include<bits/stdc++.h>
using namespace std;
#define ll long long // 数据范围到10^5,累加后可能爆int,必须开long long
int main() {
    ios::sync_with_stdio(false); // 加速IO
    cin.tie(0);
    int n;
    cin >> n;
    ll sum = 0, ans = 0, a;
  • 详细分析:卡牌的分值 aiai​ 绝对值最大可达 10^5,卡牌数量 nn 最大也是 10^5 。在极端情况下,前缀和的累加可能会达到 10^10 的级别,这远远超过了 int 类型的表示范围(约 2×10^9 )。因此,代码中定义了 ll (long long) 来存储前缀和 sum 和最终答案 ans,这是防止数据溢出的关键。

2. 核心逻辑:线性扫描与贪心累加

    for (int i = 1; i <= n; i++) {
        cin >> a;
        sum += a; // 实时计算前缀和
        
        // 只有前缀和大于0,且不是第一张牌(至少合并2张)时,才加入总分
        if (i != 1 && sum > 0) ans += sum;
    }
    cout << ans << "\n";
    return 0;
}
  • 详细分析:这是代码的灵魂所在,仅用一个循环就解决了问题。
    • 实时前缀和:在读取每一个卡牌分值 a 的同时,立刻将其累加到 sum 中。此时的 sum 就代表了原数组从第 1 张到第 i 张卡牌的总和。
    • 贪心判定:if (i != 1 && sum > 0) 包含两个核心条件。i != 1 满足了题目“至少选取2张卡牌”的硬性约束;sum > 0 则是贪心策略的体现。只要当前累积的前缀和是正收益,我们就执行这次合并操作,将 sum 加到总分 ans 中。
    • 为什么不需要复杂的模拟? 因为无论中间合并了多少次,下一次合并最左侧卡牌时,其分值总和永远等于当前遍历到的位置的前缀和。我们只需要一路向右扫描,遇到正的前缀和就“吃掉”,遇到负的前缀和就“停手”(后续的负前缀和不会再被加入 ans),这样就能保证得到的 ans 是全局最大值。

核心逻辑总结表

代码模块核心变量/操作精炼作用解决的痛点
数据类型#define ll long long使用 64 位整数存储累加和防止在卡牌数量与分值均达到 105105 时,总分计算发生整型溢出
前缀和计算sum += a在读取数据的同时计算前缀和将复杂的“卡牌合并与替换”过程,转化为直观的数学前缀和累加
规则约束i != 1限制从第2张卡牌开始判断严格遵守了题目中“每次至少选取2张卡牌”的操作限制
贪心策略sum > 0仅当当前前缀和为正时才累加保证了每一步操作都能使总分增加,从而获得全局最优解
答案累加ans += sum将正收益的前缀和计入总分完美模拟了多次合并操作对总分的贡献,无需真正修改卡牌序列
csp信奥赛C++高频考点专项训练之前缀和&差分 --【一维前缀和】:[省选联考 2020 B 卷] 卡牌游戏 阅读详情

相关推荐

5个4000比特大状态置换算法的设计与分析

下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。

HuangJinLong2的博客 351

洛谷P6625 [省选联考 2020 B 卷] 卡牌游戏

这题别看题目有点长并且是个省选联考题,其实总结下来就一句话:求前缀和中所有不为负数的前缀和的和。那么总结完题目这题就简单多了。接下来只需要按照题目要求从2开始遍历前缀和数组,将所有不为负数的数加起来就好了。接下来上代码。

KAFKAut的博客 626

飞书文档API深度使用指南:如何用n8n社区节点绕过HTTP Request的复杂配置

本文详细解析了如何利用n8n社区节点简化飞书文档API的集成过程,绕过复杂的HTTP Request配置。通过n8n-feishu-lite社区节点,开发者可以轻松实现飞书文档的创建、编辑和查询操作,大幅提升自动化工作流的效率。文章还提供了高级应用场景和性能优化建议,帮助开发者更好地利用飞书开放平台的API功能。

weixin_29227585的博客 83

【寒假每日一题】洛谷 P6625 [省选联考 2020 B 卷] 卡牌游戏

此时轩轩选择的四张卡牌被替换为一张分值为 6 的卡牌,且被放入序列最左侧,此时自左向右卡牌的分值为 6, -3, -5, -3。此时轩轩选择的两张卡牌被替换为一张分值为 3 的卡牌,且被放入序列最左侧,此时序列中只有一张分值为 3 的卡牌,游戏结束。此时轩轩选择的两张卡牌被替换为一张分值为 3 的卡牌,且被放入序列最左侧,此时自左向右卡牌的分值为 3, -5, -3。此时轩轩选择的两张卡牌被替换为一张分值为 1 的卡牌,且被放入序列最左侧,此时自左向右卡牌的分值为 1 和 2。仅一行一个整数表示答案。

m0_57587757的博客 1782

openEuler 22.03 安装 openGauss 5.0.2 部署手册

openEuler 22.03 安装 openGauss 5.0.2 部署手册

全国服务器高效代维 1424

从零开始:用Neo4j构建你的第一个知识图谱(附完整代码示例)

本文提供了一份从零开始的Neo4j知识图谱构建实战指南。通过一个“经典科幻电影宇宙”的具体案例,手把手教你安装环境、设计图谱模式,并使用Cypher查询语言完成节点与关系的创建、数据查询及可视化,帮助你快速掌握自下而上构建知识图谱的核心技能。

weixin_29053073的博客 471

差分+前缀和习题集

(luogu题号)

m0_69379426的博客 368

CCF201803-2 碰撞的小球 python

一些话:已经不知道是第几次做这道题了(大概第三次吧),真的常做常新,每次都有新的细节想法。虽然方法简单粗暴,但好在方便理解,对于我这种菜鸟选手而言。 但在做的过程中,最开始还忽略了输入的小球初始位置有可能是无序的,输出的时候要保持相对位置。CCF真的考验细节,希望上考场时能够认真仔细一点。就酱… #碰撞的小球 #当小球坐标为0或L时,会朝相反方向移动 #当两个小球坐标相等时,会分别转向相反的方向 #计算t秒之后小球的位置 n,L,t = map(int,input().split()) location .

tanya_dre的博客 350

场外模拟 省选联考(B卷) 2020 游记

前记 上次模拟 AAA 卷只有 155155155 分,很不爽!所以,洛谷上已经有了 BBB 卷,抽空看一下吧! 听说 BBB 卷在 JX\text{JX}JX 和少数省用了,总之挺少的,还挺简单。 还听说大众分是 350350350,加油吧! 卡牌游戏 Day1 T1\text{Day1 T1}Day1 T1 一看是个橙题,信心大增。 看完题,第一感觉是线性 dp\text{dp}dp. 猛的一想,锤子啊,前缀和的和啊。 统计所有 >0>0>0 的前缀和相加,没了。

bifanwen的博客 1017

健康保险费用预测:可解释机器学习在精算建模中的实战落地

健康保险费用预测是医疗AI与保险科技交叉领域的核心任务,本质是基于临床变量与社会因素对个体医疗支出进行风险量化。其技术原理需兼顾统计建模能力与监管可解释性,XGBoost+SHAP组合因支持特征归因、边际效应分析和临床可干预推演,成为保险精算场景的主流选择。该技术显著提升保费定价精度、降低偿付风险,并支撑DRG费用预警、团险核保辅助及再保险尾部风险评估等关键应用。本文聚焦真实产线中的时间序列验证、临床分层特征工程与监管红线指标(如Bias@90th、Calibration Slope),深入解析如何让模型不

weixin_33702545的博客 306

SQL注入详解

SQL注入(SQL Injection)是一种常见的Web安全漏洞,主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱库、被删除、甚至整个服务器权限陷)。 即:注入产生的原因是后台服务器接收相关参数未经过滤直接带入数据库查询...

渗透之路,攻防之间皆学问 26万+

[校内模拟] 200728Practice [省选联考 2020 A/B 卷] 冰火战士

很玄学 感到我懂了,然鹅基本抄了标程 真正的题解 #include<bits/stdc++.h> using namespace std; #define in Read() int in{ int i=0,f=1;char ch=0; while(!isdigit(ch)&&ch!='-') ch=getchar(); if(ch=='-') ch=getchar(); while(isdigit(ch)) i=(i<<1)+(i<<3)+ch-

Antimonysbguy的博客 313

【专栏必读】王道考研408数据结构+算法设计与分析万字笔记使用说明及章节导航

各位老铁思维导图在我整理完笔记后会放上去的,我需要根据王道的思维导图重新再做一遍 文章目录一:有关注意事项二:关于专栏三:学习建议四:各专栏导航(各位老铁别催,质量优先)(1)第一章:绪论(2)第二章:线性表(3)第三章:栈和队列第四章:串第五章:二叉树第六章:图 首先感谢王道大大(手动比心),很用心在做了,大家可以看其中两节是否符合胃口 (王道408考研数据结构)第五章树-第三节1:二叉树遍历(先序、中序和后序) (王道408考研数据结构)第五章树-第四节2:平衡二叉树(AVL)及其旋转 一:有.

快乐江湖的博客 5万+

打卡信奥刷题(512)用C++信奥P6625[普及组/提高] [省选联考 2020 B 卷] 卡牌游戏

n201现在给出序列中各个卡牌的分值,请你来帮助轩轩计算他能够获得的最高总分是多少?

Loge谈信奥--一个专注于信奥人的博客 3244

YOLOv8【第二章:卷积创新篇·第23节】一文搞懂,Transformer与卷积混合架构!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》,该专栏持续复现网络上各种热门内容(全网YOLO改进最全最新的专栏,质量分97分+,全网顶流),改进内容支持(分类、检测、分割、追踪、关键点、OBB检测)。且专栏会随订阅人数上升而涨价(毕竟不断更新),当前性价比极高,有一定的参考&学习价值,部分内容会基于现有的国内外顶尖人工智能AIGC等AI大模型技术总结改进而来,嘎嘎硬核。    ✨ 特惠福利:目前活动一折秒杀价!一次订阅,永久免费,所有后续更新内容均免费阅读!

**My Coding Family** 1388

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

信奥赛-刷题笔记-前缀和篇-T2-P6625卡牌游戏0524

刷题笔记-前缀和P6625卡牌游戏

IT从业者的成长历程 1160

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

蓝桥杯算法备赛12.1(题)

现在给出序列中各个卡牌的分值,请你来帮助轩轩计算他能够获得的最高总分是多少?

2401_87004594的博客 1021

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

洛谷错题分享_001

摘要:洛谷P6625卡牌游戏题目要求通过合并连续卡牌使总分最大化。解题思路原采用递归枚举但未理清变量关系导致错误(Score-5)。正确解法由@娇娇yyyyyy老师指导,改用前缀和优化(Score-100)。关键点在于合并顺序的选择和范围判定,最终实现高效计算最大得分。

PoaCh_EGG的博客 371

NOI省选真题

本文汇总了2017至2026年间各省信息学竞赛省选题解及游记,涵盖算法考点如欧拉定理、线段树、动态规划等。重点包括六省联考2017《相逢是问候》的欧拉定理应用、2020-2022年卡牌游戏题的贪心解法、2022年填树题的树形DP与拉格朗日插值,以及2025-2026年省选模拟题的解析。内容涉及竞赛技巧、代码实现和参赛经验,为OI选手提供备考参考。

青少年趣味编程 147

CSP-J满分题单

满分题单遵循‌由易到难、知识点分层‌的原则,覆盖CSP-J复赛4道题的难度梯度(T1基础、T2简单、T3中等、T4较难),针对性训练竞赛核心考点,避免题海低效刷题。P8813乘方、P8814解密、P7909分糖果、P11227扑克牌、P11228地图探险,贴合近年命题风格。包含《优秀的拆分》《乘方》《扑克牌》《小苹果》等经典题目,可直接在洛谷搜索名称作答。基础搜索题如P1596(数池塘)、P1443(马的遍历),训练搜索框架实现。针对T4的难题训练,包含线性DP、背包DP、区间DP等基础题型。

青少年趣味编程 730

杨校老师带你备战CSP-J组400满分洛谷推荐题单【建议收藏】

为助力孩子在CSP-J信奥赛中脱颖而出,精心打造了 “CSP-J满分题单第一系列” ,直击竞赛核心,帮助孩子用最短时间攻克高分壁垒!这份题单凝聚了历年真题精华与高频考点(如动态规划、二分算法、数学思维等),覆盖2019-2024年CSP-J真题及权威模拟题,每一题都经过信奥教练团队深度解析,让孩子精准定位薄弱环节,告别低效刷题。特别价值:针对校内数学前20%的潜力生,题单深度融合数学思维与算法逻辑,配套安教练团队一对一答疑,让孩子从“会编程”进阶到“懂竞赛”。:拒绝“题海战术”!

杨校的博客 3305

1 前缀和

数列的前n项的和,可以算作是一种优化方式前缀和一般以数组的形式来体现,前缀和数组a[n]的每一项代表前n-1项之和。

summer112786的博客 899

前缀和与差分prefix_sum and difference【算法模板笔记】

前缀和与差分prefix_sum and difference【算法模板笔记】

weixin_49320014的博客 337

P7514-[省选联考2021A/B卷]卡牌游戏【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/P7514 题目大意 给出nnn个卡牌有ai/bia_i/b_iai​/bi​,开始都是aia_iai​朝上,将不超过mmm张卡牌变为bib_ibi​面朝上,使得朝上的数字中最大值减去最小值最小。 3≤n≤106,1≤m<n,1≤ai,bi≤1093\leq n\leq 10^6,1\leq m<n,1\leq a_i,b_i\leq 10^93≤n≤106,1≤m<n,1≤ai​,bi​≤109 解题思

QuantAsk 810

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 212

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 314
上一篇: P1031 [NOIP 2002 提高组] 均分纸牌
下一篇: P1387 最大正方形
谢天谢地AC了 | 信奥教练
博客等级 码龄1年 53粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值