国王游戏(大整数用自己写的vector做的)

NOIP2012 国王游戏:贪心策略推导与 3 种高精度实现方案对比 本文深入解析NOIP2012经典题目《国王游戏》的贪心策略与高精度实现方案。通过严格的数学证明揭示按左右手乘积升序排列的最优性,并对比三种高精度实现(结构体数组、vector动态数组、Python大整数)的性能差异,为算法竞赛选手提供实践指导。文章特别强调在n≤1000且a,b≤10000时处理4000位数级别乘积的高精度技巧。 阅读详情

恰逢 H H国国庆,国王邀请 nn 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 nn 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。

输入格式
第一行包含一个整数 nn,表示大臣的人数。

第二行包含两个整数 aa和 bb,之间用一个空格隔开,分别表示国王左手和右手上的整数。

接下来 n n行,每行包含两个整数 aa 和 bb,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。

输出格式
一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。

注意以大臣的左右手之和从小到大排序,证明在这里不多说有兴趣的小伙伴可以手动推一遍,还需要注意的是需要找到大臣中的最大金币数量

#include<iostream>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;

vector<int> mul(vector<int>a, int b)
{
	vector<int>c;
	int t = 0;
	for (int i = a.size() - 1; i >= 0; i--)
	{
		t += a[i] * b;
		c.insert(c.begin(), t % 10);
		t = t / 10;
	}
	while (t)
	{
		c.insert(c.begin(), t % 10);
		t = t / 10;
	}
	return c;
}

vector<int> div(vector<int>a, int b)
{
	vector<int>c;
	bool is_first = true;
	int t = 0;
	int x = 0;
	for (int i = 0; i < a.size(); i++)
	{
		t = t * 10 + a[i];
		x = t / b;
		if (!is_first || x)
		{
			c.push_back(x);
			is_first = false;
		}
		t = t % b;
	}
	return c;
}

const int  N = 10010;
typedef pair<int, int> PII;
PII p[N];

vector<int> max_vector(vector<int>a, vector<int>b)
{
	if (a.size() > b.size())return a;
	else if (a.size() < b.size())return b;
	else
	{
		for (int i = 0; i < a.size(); i++)
		{
			if (a[i] > b[i])
				return a;
			else if (a[i] < b[i])
				return b;
		}
		return a;
	}
}
int main()
{
	int n;
	cin >> n;
	int a, b;
	cin >> a >> b;//国王左右手
	int c, d;
	for (int i = 1; i <= n; i++)
	{
		cin >> c >> d;
		p[i].first = c * d;
		p[i].second = d;
	}
	sort(p + 1, p + 1 + n);
	vector<int> res;
	vector<int>e(1,a);
	while (a)
	{
		res.insert(res.begin(),a % 10);
		a = a / 10;
	}
	for (int i = 1; i < n; i++)
	{
		res = max_vector(res, div(e, p[i].second));//寻找其中的最大值
		e = mul(e, p[i].first / p[i].second);
	}
	res = max_vector(res, div(e, p[n].second));
	for (int i = 0; i < res.size(); i++)
		cout << res[i];
	cout << endl;
	system("pause");
	return 0;
}
贪心算法在国王游戏问题中的应用与高精度处理 贪心算法是解决最优化问题的经典方法,其核心思想是通过局部最优选择达到全局最优。在算法竞赛中,邻项交换问题常需要严谨的数学证明来验证贪心策略的正确性。以NOIP2012提高组的国王游戏为例,该问题要求通过重新排列队伍顺序,使得获得最多金币的大臣获得的金币数尽可能少。解题关键在于推导出按左右手数字乘积升序排列的贪心策略,并处理高精度运算。这类问题在任务调度、生产安排等工程实践中也有广泛应用,展现了算法设计在平衡效率与公平性方面的重要价值。 阅读详情

相关推荐

贪心算法与高精度实现:从“国王游戏”问题解析算法思维与工程实践

贪心算法是算法设计中的一种核心思想,其原理在于通过每一步的局部最优选择,期望达到全局最优解。这种策略在解决最优化问题时具有高效、直观的技术价值,广泛应用于任务调度、资源分配、路径规划等场景。在算法竞赛和工程实践中,贪心算法的关键在于正确推导排序或选择规则,并处理可能的大数运算。以经典的“国王游戏”问题为例,其核心在于通过邻项交换分析,推导出按左右手数字乘积排序的贪心策略。同时,由于涉及大数乘除,必须引入高精度计算来确保结果正确,这体现了算法思维与工程实现(如高精度运算)的紧密结合。掌握此类问题的分析方法和实

weixin_27102543的博客 280

国王游戏——高精度好题

题目描述 恰逢 H H国国庆,国王邀请 nn 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 nn 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。 国王不希望某一个大臣获得...

天天向上 4709

基于verilog的16QAM调制

思路1:正交调幅法——实现16QAM调制,可以理解为时相位相差90度的两个正弦波的4PAM叠加。 4比特输入经过2->4进制转化得到两路2比特输入,然后分别经过4PAM后叠加所得输出即为16QAM调制结果。 具体程序稍后编写。 思路2:复合相移法——可以借助前面编写的QPSK,相当于两路幅度不同的QPSK的叠加,比如幅度分别取1和3 。 思路1正交调幅法的设计方案: 两正弦波相位差...

weixin_30725467的博客 2929

【NOIP2012】国王游戏(一类全序问题)

设按新安排的队伍顺序第 iii 个人左手数字为 aia_iai​,右手数字为 bib_ibi​。 我们考虑什么时候交换第 iii 个人和第 i+1i+1i+1 个人不会更优。 设前 i−1i-1i−1 个人获得的金币的最大值为 preprepre,他们 aia_iai​ 的乘积为 sss。 由于交换第 iii 个人和第 i+1i+1i+1 个人对后面的人获得的金币数没有影响,所以我们只需要让前 i+1i+1i+1 个人的最大值最小。 交换前:ans1=max⁡(pre,sbi,s⋅aibi+1)ans_1=

ez_lcw的博客 1224

Ansys-结构动力学分析-圆柱斜齿轮模态分析学习心得

模态分析的步骤基本一直,不同点在于选择什么单元类型,模型,节点约束等 圆柱斜齿轮模态分析的难点在于圆柱斜齿轮的模型建立,和所要约束的节点的选择。 用命令流方法建立齿轮模型效率较高,当然,在ansys里建立复杂的模型实在不敢恭维,对于自下而上建模,需要知道每个关键点的坐标位置。下图是创建圆柱斜齿轮模型的命令流方式。 模型不同使用的数据也就不同了。 对于施加约束的问题这就必须要熟悉select e...

weixin_45385183的博客 1831

从AI画稿到3D虚拟时装:Illustrator与Substance 3D的服装设计工作流

本文旨在解决传统服装与纺织品设计师在产品开发流程中,面临的“2D印花图案无法直观预见3D上身效果”、“物理打样成本高昂且周期漫长”的核心痛点。我们将介绍一套纯数字化的3D可视化工作流,核心是利用 Adobe Illustrator 进行矢量印花图案创作,通过 Adobe Substance 3D Sampler 将其转化为逼真的PBR(基于物理渲染)布料材质,并最终在 Adobe Substance 3D Stager 中,将该材质应用于3D服装模型,渲染出照片级的虚拟样衣。本指南将帮助设计师以极低的成本和

Kingsdesigner的博客 1398

贪心问题——国王游戏

题目来源:https://www.luogu.com.cn/problem/P1080。

m0_60738889的博客 1566

红日-VulnStack靶场-ATT&CK(二):从Weblogic漏洞到域控渗透实战

本文详细解析了红日安全团队VulnStack靶场中从Weblogic漏洞到域控渗透的完整攻击链。通过实战演示Weblogic反序列化漏洞利用、Cobalt Strike持久化控制、域内信息收集及PsExec横向移动等关键技术,复现了企业内网渗透的典型场景,并提供了防御建议。

tgb3456789的博客 936

[noip2012]国王游戏 题解

显然,这样题一定是要排序的,如何拍呢。我们先猜一猜,发现只要按照乘积大小来排序就好了。至于证明,我们这样想,如果只交换两个相邻的数,产生的影响只要它们两个数之间,然后讨论一下就可以了。然后,60%数据保证答案小于10^9,说明什么,之后的数据要上高精度,好麻烦呀。但其实还是可以写的,可以写在一个结构体内,但我好像不会233。就用的函数,貌似很丑,大家凑合看看。#include<bits/stdc++

浅笑~如夏 1841

一分钟教会你搭建steam新游幻兽帕鲁服务器

总结: 游戏对服务器搭建要求相对较高、且对服务器网络协议有要求不能封堵UDP、多开、游戏运行久、同时在线人数多了这些会很吃内存 我自己用的64G内存多开4区测试玩家同时在线50多人的情况下内存已经跑满了、对于想用服务器搭建联机的小伙伴建议根据开区数量以及玩家人数去选择配置、当然也可以直接找我阿杰购买、我可以提供技术搭建服务。注:如果用的是本地电脑局域网搭建直接输入127.0.0.1:8211就行 如果用的是服务器搭建输入自己服务器IP+端口或解析的域名+端口进入游戏。

用最简单的方式说最重要的事!服务器、存储、云计 算、A智能的大数据产品、游戏开发技术。致力于广 大开发者、政企用户、各项机构等,构建云上世界提供全方位云计算解决方案。旨在打造差异化的开放式闭环生态系统帮助用户快速构建稳定、安全的云计算环境。 2235

Ansys Lumerical实战:5步搞定Mach-Zehnder调制器多物理场仿真(附眼图分析技巧)

本文详细介绍了使用Ansys Lumerical进行行波马赫-曾德尔调制器多物理场仿真的完整流程。通过CHARGE、MODE和INTERCONNECT三大模块的协同工作,从电学参数提取、光学射频特性分析到系统级眼图评估,分步解析了高效仿真与性能优化的核心技巧,为硅光调制器设计提供了实战指南。

weixin_29056781的博客 542

P2615 [NOIP2015 提高组] 神奇的幻方 python解法

幻方是一种很神奇的 N×N 矩阵:它由数字1,2,3,⋯⋯,N×N 构成,且每行、每列及两条对角线上的数字之和都相同。共 N 行,每行 N 个整数,即按上述方法构造出的 N×N 的幻方,相邻两个整数之间用单空格隔开。对于 100%100% 的数据,对于全部数据, 1≤N≤39 且 N 为奇数。现给定 N ,请按上述方法构造 N×N 的幻方。NOIp2015 提高组 Day1T1。首先将 11 写在第一行的中间。一个正整数 N,即幻方的大小。

Steins_Gate_0的博客 1427

【JTAG】1149.6协议详解

JTAG1149.6协议是1149.1协议中Boundary-Scan结构的扩展,1149.1对交流耦合、差分或两者兼有的情况并没有得到充分的处理。该协议支持新的I/O测试结构。需要时变(AC)信号的高级I/O引脚允许测试它们之间的连接,这包括所有差分信号引脚或单端信号引脚,通过设计支持交流耦合。..................

xuhe0206的博客 4574

国王游戏【贪心】【高精度vector版】

国王游戏 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。 首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。 然后,让这 n 位大臣排成一排,国王站在队伍的最前面。 排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是: 排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。 国王不希望某一个大...

谁是凶手1703 285

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

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

国王游戏

国王游戏 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。 首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。 然后,让这 n 位大臣排成一排,国王站在队伍的最前面。 排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是: 排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。 国王不希望某一个大臣获...

lifehappy 489

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

国王的游戏(贪心+高精度)

国王的游戏(贪心+高精度) 问题描述: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽

qq_34701775的博客 429

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

luogu P1080 国王游戏

恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这n位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

smartzxf的博客 341

洛谷P1080 国王游戏

洛谷P1080 国王游戏 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。 ...

Nick12138_2017的博客 598

acwing114.国王游戏

高精度乘除法的应用 添加链接描述 高精度乘法 vector<int> mul(vector<int> a, int b) { vector<int> c; int t = 0; for (int i = 0; i < a.size(); i ++) { t += a[i] * b; c....

weixin_43665122的博客 190

P1080 [NOIP 2012 提高组] 国王游戏 总结与反思(好难)

其中我认为最难的部分就是对于高精度的处理,其次是解题思路这一块,也就是贪心和排序方面,简单几步就能搞明白,但是高精度处理这里我看着AI写的解析看了好一会儿才明白,(看着看着还犯困了),其中高精度的处理是个硬核知识点,明天我还得回来看看,今天好累啊,明明没做什么事.....// 用 vector 存每一位数字。// 将国王的左手数转化成 BigInt。// 计算当前这个人的奖赏。// --- 高精度核心功能 ---// 比较两个大数谁更大。// 大数 * 小数。// 大数 / 小数。

2603_95421416的博客 349

[NOIP2012 提高组] 国王游戏:贪心策略的数学证明与高精度实现详解

本文详细解析了NOIP2012提高组经典题目《国王游戏》的贪心策略与高精度实现。通过数学证明揭示了按左右手乘积排序的正确性,并提供了高精度乘法、除法及比较的代码实现,帮助读者掌握算法竞赛中的关键技巧与常见错误规避方法。

534

进阶指南--国王游戏

1、比较相邻两个大臣,要他们二者的顺序下的最大值最小,则推公式可得,谁的左手右手乘积越小在前,则二者的最大值最小 所以即对大臣们进行乘积从小到大排即可 2、处理过程中的高精度,需要注意除法需要消去前导0 #include <bits/stdc++.h> using namespace std; const int MA = 1010; pair<int,int> PDD[MA];//对每位大臣的金币的乘积进行排序 vector <int> AA;//表示前面的和 ve

qq_37548017的博客 388

C++ 高精度模板实战:从国王游戏 P1080 看 4 类大数运算优化技巧

本文深入探讨了C++高精度运算在算法竞赛中的优化技巧,以NOIP2012经典题目'国王游戏'为例,详细解析了压位处理、前导零优化、Karatsuba乘法和试商法加速除法等4类核心策略。通过模块化设计和实战测试,展示了如何构建高效可复用的高精度模板库,显著提升大数运算性能。

cri5768的博客 368

牛客刷题 — 【排序】[NOIP2012] 国王的游戏(高精度&结构体排序)

(注意vector是从低精度开始存储的,在比较和输出时注意顺序!相邻的两个大臣的先后顺序只会互相影响,并不会影响其他人的金币数。最后需要注意下累成会涉及到高精度的运算,这里参考之前学习的。因为每个大臣两个手上的整数a,b>=1,所以有。假设前 i-1 个人左手上的数乘积为 s。可以看出,若要取得金币数的最小值。此时的金币数最大值为。此时的金币数最大值为。

Satur9的博客 331

从“国王-男人+女人=女王”解析词向量原理与实战训练

词向量(Word Embedding)是自然语言处理中的基础技术,它将词语映射为高维空间中的稠密向量,从而让计算机能够量化语义关系。其核心原理基于分布假说,通过神经网络模型(如Word2Vec)从海量文本中学习词语的共现模式,使语义相近的词在向量空间中距离更近。这项技术的价值在于突破了传统离散表示的局限,实现了语义的可计算性,为机器理解语言提供了数学基础。在应用场景上,词向量广泛用于文本分类、信息检索、机器翻译等任务的初始特征表示。本文以经典的“国王-男人+女人=女王”类比为切入点,通过代码实战演示如何训练

weixin_34242819的博客 352
上一篇: 大整数乘除法(vector)写法
下一篇: 前缀和理念和应用,广义阿基米德原理
MaplePlane
博客等级 码龄7年 9粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值