PTA锦标赛

手把手教你用C++搞定PTA锦标赛题:避开‘测试点6、7’的那些坑 本文详细解析了如何用C++解决PTA锦标赛题目L2-047,特别针对容易出错的测试点6和7提供了完整的解决方案。通过构建败者树、维护胜者最小值和回溯构建解决方案等核心算法,帮助参赛者避开常见陷阱,提升算法竞赛能力。 阅读详情

作者 DAI, Longao

单位 杭州百腾教育科技有限公司

有 2k 名选手将要参加一场锦标赛。锦标赛共有 k 轮,其中第 i 轮的比赛共有 2k−i 场,每场比赛恰有两名选手参加并从中产生一名胜者。每场比赛的安排如下:

  • 对于第 1 轮的第 j 场比赛,由第 (2j−1) 名选手对抗第 2j 名选手。
  • 对于第 i 轮的第 j 场比赛(i>1),由第 (i−1) 轮第 (2j−1) 场比赛的胜者对抗第 (i−1) 轮第 2j 场比赛的胜者。

第 k 轮唯一一场比赛的胜者就是整个锦标赛的最终胜者。
举个例子,假如共有 8 名选手参加锦标赛,则比赛的安排如下:

  • 第 1 轮共 4 场比赛:选手 1 vs 选手 2,选手 3 vs 选手 4,选手 5 vs 选手 6,选手 7 vs 选手 8。
  • 第 2 轮共 2 场比赛:第 1 轮第 1 场的胜者 vs 第 1 轮第 2 场的胜者,第 1 轮第 3 场的胜者 vs 第 1 轮第 4 场的胜者。
  • 第 3 轮共 1 场比赛:第 2 轮第 1 场的胜者 vs 第 2 轮第 2 场的胜者。

已知每一名选手都有一个能力值,其中第 i 名选手的能力值为 ai​。在一场比赛中,若两名选手的能力值不同,则能力值较大的选手一定会打败能力值较小的选手;若两名选手的能力值相同,则两名选手都有可能成为胜者。

令 li,j​ 表示第 i 轮第 j 场比赛 败者 的能力值,令 w 表示整个锦标赛最终胜者的能力值。给定所有满足 1≤i≤k 且 1≤j≤2k−i 的 li,j​ 以及 w,请还原出 a1​,a2​,⋯,an​。

输入格式:

第一行输入一个整数 k(1≤k≤18)表示锦标赛的轮数。
对于接下来 k 行,第 i 行输入 2k−i 个整数 li,1​,li,2​,⋯,li,2k−i​(1≤li,j​≤109),其中 li,j​ 表示第 i 轮第 j 场比赛 败者 的能力值。
接下来一行输入一个整数 w(1≤w≤109)表示锦标赛最终胜者的能力值。

输出格式:

输出一行 n 个由单个空格分隔的整数 a1​,a2​,⋯,an​,其中 ai​ 表示第 i 名选手的能力值。如果有多种合法答案,请输出任意一种。如果无法还原出能够满足输入数据的答案,输出一行 No Solution。
请勿在行末输出多余空格。

输入样例1:

3
4 5 8 5
7 6
8
9

输出样例1:

7 4 8 5 9 8 6 5

输入样例2:

2
5 8
3
9

输出样例2:

No Solution

题目大意:

还原竞技场原先人员的排序,给每次按排序给出失败的选手的成绩。

思路:

用倒着的二叉树模拟位置,每次记录这一次人赢的人位置在哪,在下一轮读入时把失败者的值放入前一轮赢的位置。

方法:

用数组去存放数值,用链表记录下一场人在哪。

核心代码:

if(i == 1)v[j*2-1] = b[i][j],ne[i][j]=j*2;//第一轮初始化所有失败和胜利的值
else{
	mx = max({b[i][j],b[i-1][j*2],b[i-1][j*2-1]}); 
	if(!flag || b[i][j] < b[i-1][j*2] && b[i][j] < b[i-1][j*2-1]){//当前已经不合法,或者给的失败者的值是不合法 
		flag=0;
		break;
	}else if(b[i][j] >= b[i-1][j*2]){//先看看能不能放右边
		v[ne[i-1][j*2]] = b[i][j];
		ne[i][j] = ne[i-1][j*2-1];//能放右边就继承左节点
	}else{
		v[ne[i-1][j*2-1]]=b[i][j];
		ne[i][j]=ne[i-1][j*2];
	}
	b[i][j]=mx;
}

举例如下:第一轮选了1,3,这一轮赢的位置是2,4,下一场2败了,最后赢的位置就是4。

#include<bits/stdc++.h>
using namespace std;
typedef int ll;
#define endl "\n"

const ll N = 1<<19;
ll n;
ll b[20][N],ne[20][N],v[N];//读入这场失败的人的值,这场赢的人的位置,最后的排序 

void solve(){
	cin >> n;
	bool flag=1;
	ll mx;
	for(ll i = 1 ; i <= n ; i ++){
		for(ll j = 1 ; j <= (1 << (n-i) ) ; j ++){
			cin >> b[i][j];
			if(i == 1)v[j*2-1] = b[i][j],ne[i][j]=j*2;//第一轮初始化所有失败和胜利的值
			else{
				mx = max({b[i][j],b[i-1][j*2],b[i-1][j*2-1]}); 
				if(!flag || b[i][j] < b[i-1][j*2] && b[i][j] < b[i-1][j*2-1]){//当前已经不合法,或者给的失败者的值是不合法 
					flag=0;
					break;
				}else if(b[i][j] >= b[i-1][j*2]){//先看看能不能放右边
					v[ne[i-1][j*2]] = b[i][j];
					ne[i][j] = ne[i-1][j*2-1];//能放右边就继承左节点
				}else{
					v[ne[i-1][j*2-1]]=b[i][j];
					ne[i][j]=ne[i-1][j*2];
				}
				b[i][j]=mx;
			}
		}
	}
	cin >> mx;//对最后的mx判断是否合法 
	b[n][1] <= mx ? v[ne[n][1]]=mx : flag=0;
	if(!flag) cout << "No Solution" << endl ;
	else for(ll i = 1 ; i <= (1<<n) ; i ++)
		i > 1 ? cout << " " << v[i] : cout << v[i];
	return;
}

int main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	ll t=1;//cin >> t;
	while(t --)solve();
	return 0;
}

PTA L2-047 锦标赛:从测试点陷阱到逆向思维解题 本文深入解析PTA L2-047锦标赛题目,揭示其隐藏的测试点陷阱与逆向思维解题技巧。通过构建二叉树模型和自顶向下的约束传播,有效解决能力值异常情况,并提供性能优化策略。文章还分享了实战调试经验,帮助选手避免常见误区,提升解题效率。 阅读详情

相关推荐

PTA天梯赛L2-047“锦标赛”避坑指南:详解测试点6、7的隐藏逻辑与数组mp的正确用法

本文深入解析PTA天梯赛L2-047'锦标赛'题目,重点揭示测试点6、7的隐藏逻辑与数组mp的正确用法。通过详细分析败者树结构、能力值约束及全局一致性要求,帮助参赛选手避开常见陷阱,优化解题策略。特别针对测试点6、7的致命陷阱,提供了mp数组的维护方法和调试技巧,助力竞赛编程实践。

weixin_30847865的博客 180

2024PTA L1题(详细注释+测试点c++)

在古老的红绿灯面前,红绿色盲患者无法分辨当前亮起的灯是红色还是绿色,有些聪明人通过路口的策略是这样的:当红灯或绿灯亮起时,灯的颜色无法判断,但前方两米内有同向行走的人,就跟着前面那人行动,人家走就跟着走,人家停就跟着停;麻烦的是,当灯的颜色无法判断时,前方两米内没有人……发帖人不会做这道题,但是回帖有会做的:每一个才艺是一个技能点,一共是 30 + 35 + 42 + 46 = 153 个技能点,50 个人假设平均分配,每人都会 3 个技能那也只有 150,所以至少有 3 人会四个技能。

2301_79370590的博客 6509

PTA L2-047锦标赛题解:从二叉树视角手把手教你逆向还原选手能力值(含测试点6、7避坑指南)

本文详细解析了PTA L2-047锦标赛题目,通过二叉树模型逆向还原选手能力值的方法。从比赛规则理解到解题思路构建,再到测试点6、7的避坑指南,提供完整的算法实现和优化技巧,帮助编程竞赛选手掌握这一复杂问题的解决策略。

weixin_30892763的博客 226

L1-094 剪切粘贴 题解(字符串的基本操作)

【代码】L1-094 剪切粘贴 题解(字符串的基本操作)

weixin_51649775的博客 529

别再硬模拟了!用‘败者树’思想5分钟搞定PTA L2-047锦标赛逆向还原题

本文介绍如何利用败者树思想高效解决PTA L2-047锦标赛逆向还原题,避免传统暴力模拟的复杂性。通过自顶向下的胜者推导和简洁的代码实现,5分钟内即可理清思路并完成题目,显著提升算法竞赛解题效率。

weixin_42648844的博客 315

N5105 PVE UEFI核显直通Windows:从黑屏到HDMI输出的实战调优

本文详细介绍了在N5105处理器上实现PVE UEFI核显直通Windows的实战调优方法。针对黑屏和HDMI音频无法识别等常见问题,提供了系统参数调整、驱动模块加载、虚拟机配置等解决方案,帮助用户成功实现核显直通并优化性能。

weixin_42566424的博客 203

PTA L1-078 吉老师的回归 15分 C语言实现

L1-078 吉老师的回归分数 15全屏浏览题目切换布局作者 DAI, Longao单位 杭州百腾教育科技有限公司曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦!。众所周知,吉老师的竞赛水平非常高超,你可以认为他每道题目都会做(事实上也是……)。因此,吉老师会按照顺序看题并做题。但吉老师水平太高了,所以签到题他就懒得做了(浪费时间),具体来说,假如题目的字符串里有qiandao或者easy(区分大小写)的话,吉老师看完题目就会跳过这道题目不做。

weixin_72225068的博客 573

ANSYS命令流黑箱揭秘:流体渗透压力载荷的七种收敛优化策略

本文深入解析ANSYS Workbench中流体渗透压力载荷的七种收敛优化策略,重点探讨接触探测点迭代逻辑、PPCN阈值动态调整及FPAT参数优化等关键技术。通过命令流示例和实战技巧,帮助工程师有效解决流体与结构相互作用仿真中的收敛难题,提升计算效率和精度。

weixin_29274337的博客 521

2021 RoboCom 世界机器人开发者大赛-本科组(初赛)

分数 20作者 DAI, Longao单位 杭州百腾教育科技有限公司众所周知,在互联网上有很多话是不好直接说出来的,不过一些模糊的图片仍然能让网友看懂你在说什么。然而对这种言论依然一定要出重拳,所以请你实现一个简单的匹配算法。现在我们采集了原图的一些特征数据,由N个小于 255 的非负整数组成,假设对于给定的若干张由M**i个同样小于 255 的非负整数组成的新图的特征数据,每个数据都可以由原图中任意四个不同数据的平均值计算而来,则称新图为原图的相似图片。

weixin_62646853的博客 520

LlamaIndex 入门实战

LlamaIndex是一个“数据框架”,用于帮助构建LLM应用程序。它提供了各种工具,包括数据连接器,用于摄取现有数据源和数据格式(API,PDF,文档,SQL等),以及用于将数据结构化(索引,图形)以便与LLM轻松使用的方式。此外,LlamaIndex还提供了高级的检索/查询接口,可以输入任何LLM输入提示,并返回检索到的上下文和增强知识的输出。它还允许与外部应用程序框架(如LangChain,Flask,Docker,ChatGPT等)轻松集成。

AIGC搞起 1万+

手把手教你用OpenClaw+飞书打造论文写作AI助手(附踩坑实录)

面对几十篇文献,逐一阅读摘要都费时。我:“请提取桌面‘论文参考文献’文件夹中所有PDF的摘要,整理成表格,包含:论文标题、作者、发表年份、核心方法、主要结论。AI助手:“正在处理...已提取18篇论文摘要,汇总表格已保存到桌面‘文献摘要汇总.xlsx’。这比我自己一个个打开PDF复制粘贴快了不止100倍。OpenClaw+飞书的组合,让AI真正成为了我的“数字员工”。虽然配置过程有些曲折,但看到它在飞书里回应指令、帮我处理繁琐工作时,那种成就感无可替代。如果你也在准备论文,不妨试试这套方案。记住,

AcademicIdeas的博客 1041

2024 CCCC—天梯赛 别再来这么多猫娘了!

这道题有点ex... 如果平时对string容器中的几个函数不是很了解,很有可能被卡住(555......我就是这样的)L1-101 别再来这么多猫娘了!以 GPT 技术为核心的人工智能系统出现后迅速引领了行业的变革,不仅用于大量的语言工作(如邮件编写或文章生成等工作),还被应用在一些较特殊的领域——例如去年就有同学尝试使用 ChatGPT 作弊并被当场逮捕(全校被取消成绩)。相信聪明的你一定不会犯一样的错误!

2301_79363050的博客 3552

面向 Cloud Foundry、ABAP On-Prem 与 ABAP Cloud 的 SAP Fiori 开发全景:工具、流程与实战案例

SAP Fiori开发实战:基于BAS的一站式工程化方法 摘要: 本文系统梳理SAP Business Application Studio(BAS)在Fiori开发中的核心能力,提供三种典型后端(Cloud Foundry/ABAP On-Prem/ABAP Cloud)的对接方案。BAS通过预置Fiori Tools套件、MTA部署工具等扩展,支持从模板创建、可视化建模到构建部署的全流程。文章包含CAP+RAP服务对接、ABAP标准应用扩展等实战案例,重点解析注解驱动开发、Adaptation Proj

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 254

PTA 锦标赛

有 2k 名选手将要参加一场锦标赛。锦标赛共有 k 轮,其中第 i 轮的比赛共有 2k−i 场,每场比赛恰有两名选手参加并从中产生一名胜者。第 k 轮唯一一场比赛的胜者就是整个锦标赛的最终胜者。已知每一名选手都有一个能力值,其中第 i 名选手的能力值为 ai​。在一场比赛中,若两名选手的能力值不同,则能力值较大的选手一定会打败能力值较小的选手;若两名选手的能力值相同,则两名选手都有可能成为胜者。令 li,j​ 表示第 i 轮第 j 场比赛的能力值,令 w 表示整个锦标赛最终胜者的能力值。

AcleverPig的博客 747

万字长文告诉新手如何学习Python图像处理(上篇完结 四十四) | 「Python」有奖征文

这篇文章是图像处理的最后一篇文章,后面我们将进入新的章节。图像处理文章主要讲解的图像处理方法包括图像几何运算、图像量化采样、图像点运算、图像形态学处理、图像增强、图像平滑、图像锐化、图像特效、图像分割、傅里叶变换与霍夫变换、图像分类等。个人感觉如果你是编程初学者、Python初学者或图像处理爱好者,这个系列真心适合你学习,并且这篇文章算是Python图像处理的学习路线,希望您喜欢。

杨秀璋的专栏 2万+

零基础 ABAP 学习教程系列文章的目录

曾几何时,ABAP 就是 SAP 的代名词。ABAP 这门编程语言造就了 SAP 名噪一时的 R/3 产品,同时也是如今 SAP 旗舰级产品,SAP S/4HANA 底层的实现语言。 ABAP 不仅代表着 SAP 这家公司在企业级管理软件市场辉煌的过去,ABAP 自身也在不断地进化着。SAP 不仅在本地部署(On-Premise)领域继续保持着自己绝对的统治地位,而且在云应用领域(Software-as-a-Service, 简称 SaaS), 也推出了自己的解决方案,比如 SAP S/4HANA Clo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2万+

pta 锦标赛

有 2k 名选手将要参加一场锦标赛。锦标赛共有 k 轮,其中第 i 轮的比赛共有 2k−i 场,每场比赛恰有两名选手参加并从中产生一名胜者。第 k 轮唯一一场比赛的胜者就是整个锦标赛的最终胜者。已知每一名选手都有一个能力值,其中第 i 名选手的能力值为 ai​。在一场比赛中,若两名选手的能力值不同,则能力值较大的选手一定会打败能力值较小的选手;若两名选手的能力值相同,则两名选手都有可能成为胜者。令 li,j​ 表示第 i 轮第 j 场比赛的能力值,令 w 表示整个锦标赛最终胜者的能力值。

chp20030623的博客 638

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

简单光学 1万+

PTA L2-047 锦标赛

附思路,与代码解析,测试点2解析。

写代码的七柒的博客 2147

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

避坑指南:PTA L2-047‘锦标赛’那些容易忽略的边界条件(测试点6、7详解)

本文详细解析了PTA L2-047锦标赛题目中测试点6、7的边界条件和逻辑陷阱,帮助考生避免常见错误。通过分析题目本质、mp数组的关键作用以及特殊测试用例,提供了完整的解题思路和代码实现要点,特别强调了最终胜者w的合理性检查。

weixin_30378623的博客 590

精雕软件(JDpaint) 5.5 绿色版

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

PTA L2-047 锦标赛(测试点纠错)

然而每个父节点作为败者能力值必定存在一个胜者能力值,那就再用一个数组cnt,存下每个结点对应的胜者的能力值(这里对应的是从根节点向下不断更新胜者能力值,到最后输出就可以了)。对于接下来 k 行,第 i 行输入 2k−i 个整数 li,1​,li,2​,⋯,li,2k−i​(1≤li,j​≤109),其中 li,j​ 表示第 i 轮第 j 场比赛。通过题目的描述,不难看出是一道与二叉树相关的题目,输入只给了败者的能力值,和最终胜者的能力值,要求还原出第一轮的情况。在一场比赛中,若两名选手的能力值不同,

L_BJUT的博客 1672

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

pta_L2-047锦标赛(非递归做法)

M 锦标赛分数 25全屏浏览切换布局作者 DAI, Longao单位 杭州百腾教育科技有限公司有 2k 名选手将要参加一场锦标赛。锦标赛共有 k 轮,其中第 i 轮的比赛共有 2k−i 场,每场比赛恰有两名选手参加并从中产生一名胜者。第 k 轮唯一一场比赛的胜者就是整个锦标赛的最终胜者。已知每一名选手都有一个能力值,其中第 i 名选手的能力值为 ai​。在一场比赛中,若两名选手的能力值不同,则能力值较大的选手一定会打败能力值较小的选手;若两名选手的能力值相同,则两名选手都有可能成为胜者。

yyyananan的博客 1034

PTA L2-047锦标赛:递归逆向思维与二叉树建模的深度解析

递归是算法竞赛中绕不开的核心思想,它强调将复杂问题拆解为结构相同的子问题,而二叉树作为最基础的树形数据结构,天然适合表达逐轮淘汰的锦标赛过程。归并排序中的分治框架,恰好为处理这类区间合并问题提供了模板:自底向上合并胜者,自顶向下填充败者信息。在工程实践中,掌握递归与树的配合,不仅能解决PTA、天梯赛的经典题目,更能提升对搜索、动态规划等领域的理解。本文围绕锦标赛赛题,剖析如何从“败者记录”反向建模,借助递归函数维护每个子树冠军的最低可行分数,并处理分数上修等边界情况。通过最小规模样例调试与树形递归四步法,读

weixin_32715349的博客 36

PTA L2-047锦标赛题解:从“败者信息”反推选手能力值的完整思路(附C++代码)

本文详细解析了PTA天梯赛L2-047锦标赛题目,通过逆向思维从'败者信息'反推选手能力值的完整思路,并提供了高效的C++代码实现。文章深入讲解了题目建模、数据结构设计、核心算法实现及边界条件处理,帮助编程竞赛选手掌握这类经典题型。

weixin_30247307的博客 184

L2-047 锦标赛(递归解法)

L2-047 锦标赛分数 25作者 DAI, Longao单位 杭州百腾教育科技有限公司有 2k 名选手将要参加一场锦标赛。锦标赛共有 k 轮,其中第 i 轮的比赛共有 2k−i 场,每场比赛恰有两名选手参加并从中产生一名胜者。第 k 轮唯一一场比赛的胜者就是整个锦标赛的最终胜者。已知每一名选手都有一个能力值,其中第 i 名选手的能力值为 ai​。在一场比赛中,若两名选手的能力值不同,则能力值较大的选手一定会打败能力值较小的选手;若两名选手的能力值相同,则两名选手都有可能成为胜者。

yyyananan的博客 348
上一篇: C. Good String Educational Codeforces Round 92 (Rated for Div. 2)
下一篇: PTAxt的考研路
翰墨织梦
博客等级 码龄4年 384粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值