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避坑指南)

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

weixin_30892763的博客 226

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

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

2301_79370590的博客 6509

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

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

weixin_42648844的博客 315

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

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

weixin_51649775的博客 529

基于QGIS的DEM地形数据精细化处理:从裁剪、合并到成果输出

本文详细介绍了使用QGIS进行DEM地形数据的精细化处理流程,包括数据获取、裁剪、合并及成果输出等关键步骤。通过实战技巧和注意事项,帮助用户高效处理地形数据,适用于GIS分析、三维建模等应用场景。

weixin_29093017的博客 450

Excel插件开发实战:从零封装一个带自定义Ribbon的.xlam工具包

本文详细介绍了如何从零开发一个带自定义Ribbon的Excel插件.xlam工具包。通过VBA和XML技术,读者将学习到插件架构设计、Ribbon界面定制、模块化开发以及企业级部署策略,帮助提升Excel自动化办公效率。

weixin_42531128的博客 516

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

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

weixin_72225068的博客 573

FPGA之全数字锁相环(DPLL)

1. 数字锁相环的基本原理和组成 1.1 锁相环(PLL)的简介 锁相环最开始并不是用在数字电路中,而是模拟短路中。对于模拟电路中的锁相环,大家可以参考这篇文章稍微看一下,数字和模拟只是实现的方法不同,但是原理、步骤还是共同的。关于模拟PLL。可以参考一片文章: http://www.sohu.com/a/190569594_464086 首先在学习数字锁相环之前,我们应该先了解什么是锁相环?锁相...

DBLLLLLLLL的博客 5万+

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

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

weixin_62646853的博客 520

WorkBench3.2 + VxWorks6.8安装教程

按照FTP连接主机和目标机,将整个VxWorks6.8的安装分为两个部分,一是在主机(win10系统,可以使用虚拟机或者实体机,推荐使用虚拟机)上安装workbench3.2,进行bootrom与VxWroks映像文件的生成,二是在虚拟机上安装VxWorks系统 19.10.10 首先很高兴文章能帮到大家,但由于本人已不做该方向良久,私信和评论的很多问题现在已经无法解答,如果大家有什么问题欢迎...

Alive的博客 3万+

mysql9.0windows安装

将这里的位置修改为你刚刚创建并复制data目录的地址即可,win11的系统使用vscode修改之后,会让你确认开启更高权限以进行保存,比较方便,window10不需要确认,修改后可以直接保存。:在修改之前,最好将下图文件进行备份,将原始的文件保存好一份,以防更改了配置之后,导致mysql服务报错,无法启动,备份好的话直接将有问题的配置文件给替换就可以,无需重新安装一次mySql。双击下载的msi文件进行安装。安装有问题的,可以直接进行卸载,新本的mySql会将注册表中的数据自动进行清除,还是很方便的。

m0_74824123的博客 6444

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

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

2301_79363050的博客 3552

基于verilog的16QAM调制

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

weixin_30725467的博客 2929

PTA 锦标赛

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

AcleverPig的博客 747

聊一聊固态电池和钠离子电池新技术

总之,固态电池是一种“安全又高效的未来电池”,它的好处非常明显,但目前还处于研发阶段,离普及还有一段距离。未来,这两种技术可能会与锂离子电池并存,分别满足不同的市场需求。我尝试用最通俗易懂的语言将复杂的技术讲给大家听。钠离子电池和锂离子电池的工作原理很相似,但它用的是。固态电池和钠离子电池是两种正在研发和推广的。,它们有潜力解决现有锂离子电池的部分缺点。,而不是锂(Li)。

weixin_33324696的博客 3333

MobaXterm远程连接频繁掉线?3个SSH保活设置让你告别断连烦恼

本文针对MobaXterm远程连接频繁掉线问题,提供了3个SSH保活设置方案。从基础的SSH心跳机制到进阶的会话超时调整,再到TCP层保活与代理优化,全方位解决断连烦恼。特别适合需要稳定远程连接的开发者和运维人员,有效提升工作效率。

weixin_29250573的博客 486

pta 锦标赛

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

chp20030623的博客 638

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

PTA L2-047 锦标赛

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

写代码的七柒的博客 2147

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

weixin_30378623的博客 590

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

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

yyyananan的博客 1034

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

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

weixin_30847865的博客 180

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、付费专栏及课程。

余额充值