P1080 [NOIP 2012 提高组] 国王游戏 题解复盘 P1080 [NOIP 2012 提高组] 国王游戏 题解复盘模块贪心算法目标重新排列大臣顺序使获得奖金最多的大臣奖金尽可能少基本信息项目内容题目编号、来源P1080 洛谷 / [NOIP 2012 提高组] 国王游戏训练层级B 提高贪心知识版块贪心、交换排序、高精度计算解题前・关键信号识别维度分析目标、约束、底层结构目标调整大臣排列顺序使所有大臣中奖金中的最大值最小。约束每个大臣有左右手两个数字奖金受到前面所有大臣左手乘积影响。底层结构排列顺序会影响结果因此考虑交换相邻两个大臣通过比较交换前后的结果推出排序规则。数据规模n≤1000a、b较大前缀乘积会远超 long long需要使用高精度存储。候选算法和依据算法交换贪心 高精度。依据通过交换两个相邻大臣分析可得应该按照a*b从小到大排序使大的影响尽可能靠后。复杂度预判排序 O(nlogn)。每个大臣进行一次高精度乘法和除法长度为乘积位数。空间复杂度 O(n)。解题后・外化复盘维度内容实现结构 / 核心思路1. 将每个大臣的左右手数字存入结构体。2. 按照a*b从小到大排序。3. 使用高精度数字维护当前所有前面人的左手乘积。4. 遍历排序后的大臣① 当前奖金 当前乘积 ÷ 当前大臣右手数字。② 更新最大奖金。③ 当前乘积 × 当前大臣左手数字。错因回溯1. 容易按照 a 或 b 单独排序但真正影响交换的是 a*b。2. 容易把当前大臣自己的左手数字提前乘入导致奖金计算错误。3. 容易忽略乘积过大需要使用高精度。边界和易错点1. 高精度数字需要使用 vector 保存。2. 大整数通常低位在前存储方便乘法。3. 计算奖金时必须先除后乘。4. 答案需要高精度比较不能使用普通变量。下次看到什么信号我应该想到这个方法看到① 多个对象需要排序② 排列顺序影响最大值③ 可以通过交换相邻元素比较优劣想到交换贪心推导排序规则。AC 完整代码#includeiostream#includealgorithm#includevector#includestack#includequeue#includemapusingnamespacestd;structnode{longlonga,b;};boolcmp(node x,node y){returnx.a*x.by.a*y.b;}vectorintmul(vectorinta,intb){vectorintc;intt0;for(inti0;i(int)a.size();i){intxa[i]*bt;c.push_back(x%10);tx/10;}while(t){c.push_back(t%10);t/10;}returnc;}vectorintdiv(vectorinta,intb){vectorintc;intr0;for(intia.size()-1;i0;i--){rr*10a[i];c.push_back(r/b);r%b;}reverse(c.begin(),c.end());while(c.size()1c.back()0)c.pop_back();returnc;}boolbigger(vectorinta,vectorintb){if(a.size()!b.size())returna.size()b.size();for(intia.size()-1;i0;i--){if(a[i]!b[i])returna[i]b[i];}returnfalse;}voidprint(vectorinta){for(intia.size()-1;i0;i--)couta[i];coutendl;}intmain(){intn;cinn;vectornodev(n);longlongkingA,kingB;cinkingAkingB;for(inti0;in;i){cinv[i].av[i].b;}sort(v.begin(),v.end(),cmp);vectorintsum;sum.push_back(kingA);vectorintans;ans.push_back(0);for(inti0;in;i){vectorintcurdiv(sum,v[i].b);if(bigger(cur,ans)){anscur;}summul(sum,v[i].a);}print(ans);return0;}

相关新闻

最新新闻

最疯狂的平台:用太极八卦搓宇宙代码(5.1 超导新方向)

最疯狂的平台:用太极八卦搓宇宙代码(5.1 超导新方向)

第二十七篇:常温超导的新解——用"仓库模型"拆掉电子的过路费 【距离大会:25天】 一、需求提出 LK-99闹剧过了一年,老李翻出以前的超导笔记,拍在桌上。“小蒋,超导这块必须讲讲了。西方从1911年发现4K超导&a…

2026/8/9 3:55:23
数据库字符串类型VARCHAR、VARCHAR2与CHARACTER VARYING深度解析

数据库字符串类型VARCHAR、VARCHAR2与CHARACTER VARYING深度解析

1. 数据库字符串类型的基本概念与核心差异在数据库设计过程中,字符串类型的选择往往是最容易被忽视却又影响深远的关键决策之一。作为从业15年的数据库架构师,我见过太多因为字符串类型选择不当导致的性能问题和存储浪费。VARCHAR、VARCHAR2和CHARACTER …

2026/8/9 3:55:23
JavaScript核心概念与开发现代Web应用指南

JavaScript核心概念与开发现代Web应用指南

1. JavaScript:现代Web开发的基石 2005年,当Ajax技术首次大规模应用时,JavaScript这个原本被设计用于简单表单验证的脚本语言,突然成为了构建动态网页的核心工具。如今,作为全球使用最广泛的编程语言之一,J…

2026/8/9 3:55:23
【C# 泛型接口与抽象类实战 —— 学生管理系统核心知识点总结】

【C# 泛型接口与抽象类实战 —— 学生管理系统核心知识点总结】

项目涉及知识点知识点说明泛型类Dal 实现数据存储与增删改查泛型接口IDal 定义数据访问契约泛型约束where T : People 限制类型必须继承自 People抽象类People 定义公共属性与行为模板继承Boy、Girl 继承自 People枚举Gender 定义性别常量构造函数基类受保护构造 子类构造调用…

2026/8/9 3:55:23
线程池配置公式深度解析:从系统原理到数学推导

线程池配置公式深度解析:从系统原理到数学推导

文章目录🚀 一、 CPU 密集型:Ncpu1N_{\text{cpu}} 1Ncpu​1⚙️ 1.1 物理原理:减少上下文切换💡 1.2 加 1 的工程容错考量💻 1.3 Java 获取核心数与代码实现📡 二、 IO 密集型:Brian Goetz 核心…

2026/8/9 3:55:23
又炸了!继OpenAI、Anthropic之后,中国AI Kimi K3 也在安全测试中成功“越狱“——但它只想着作弊查答案

又炸了!继OpenAI、Anthropic之后,中国AI Kimi K3 也在安全测试中成功“越狱“——但它只想着作弊查答案

事件速览2026年8月7日,美国AI安全初创公司Frontier Security披露了一项令人震惊的测试结果:月之暗面(Moonshot AI)的旗舰模型Kimi K3在一次网络安全能力评估中,成功突破了英国人工智能安全研究所(AISI&…

2026/8/9 3:50:23