P11375 [GESP202412 六级] 树上游走

gesp(C++六级)(13)洛谷:P11375:[GESP202412 六级] 树上游走 阅读详情

记录123

#include<bits/stdc++.h>
using namespace std;
const long long LIMIT=1e12;// 题目给出的上限,用来判断节点编号是否过大
int main(){//纯模拟 
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n;// 定义整型变量n,用来存储总的移动次数
	long long s;// 定义长整型变量s,存储初始节点编号(防溢出)
	string ops;// 定义字符串ops,用来存储长度为n的移动指令序列
	cin>>n>>s>>ops;
	int level=0;// 记录超出LIMIT范围的相对层数(可以理解为“虚层”),初始为0表示在安全范围内
	for(int i=0;i<n;i++){// 遍历整个指令字符串,对每一条指令进行实时决策
		char op=ops[i];// 取出当前第i步的移动指令字符
		if(op=='U'){// 如果当前指令是向上移动到父节点
			if(s==1) continue;// 如果已经在根节点(编号为1),无法继续向上,什么都不做
			if(level>0){// 如果之前在“虚层”(编号过大被隐藏了),向上走一步相当于减少一层虚层
				level--;
			}else{// 如果在真实编号的安全范围内,正常除以2找父节点
				s/=2;
			}
		}
		else if(op=='L'){// 如果当前指令是向左儿子移动 (编号 * 2)
			// 如果已经在虚层,或者下一步计算会超出限制,就只增加虚层层级,不实际计算编号
			if(level>0||s*2>LIMIT){
				level++;
			}else s*=2;// 在安全范围内,正常计算编号
		}
		else if(op=='R'){// 如果当前指令是向右儿子移动 (编号 * 2 + 1)
			// 同理,如果超出限制则只增加虚层层级
			if(level>0||s*2+1>LIMIT){
				level++;
			}else s=s*2+1;// 在安全范围内,正常计算编号
		}
	}
	cout<<s<<endl;// 循环结束后,level一定被减回0,此时的s就是最终答案,直接输出
	return 0;// 结束程序
}

前言

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

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

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


💡 核心解题思路

这道题是经典的二叉树模拟与防溢出处理问题。题目要求模拟在二叉树上的移动,但存在一个巨大的陷阱:虽然最终结果不超过 10121012 ,但在移动过程中,如果连续向左或向右走,节点编号会呈指数级增长,轻易突破 long long 的上限(约 9×10^18 ),导致溢出。

  1. 常规模拟:

    • 向上移动(U):当前节点编号除以 2(s /= 2),根节点 1 除外。
    • 向左移动(L):当前节点编号乘 2(s *= 2)。
    • 向右移动(R):当前节点编号乘 2 加 1(s = s * 2 + 1)。
  2. 破局关键:引入“虚层”(level)机制:
    为了防止在向下走时发生整数溢出,我们不能盲目计算。

    • 当向下走(L 或 R)且计算结果超过上限 10121012 时,我们不进行实际的乘法运算,而是用一个变量 level 记录“出界”的层数(即 level++)。
    • 当向上走(U)时,如果 level > 0,说明我们还在界外,此时只需要 level-- 即可,无需做除法。
    • 只有当 level == 0 且当前节点在安全范围内时,才进行真实的 s /= 2 运算。
    • 题目保证最终结果在 10^12 以内,这意味着循环结束时,level 一定会被减回 0,此时的 s 就是最终答案。

🧩 代码分块详细解释

1. 头文件与常量定义
#include<bits/stdc++.h>
using namespace std;
const long long LIMIT=1e12; // 定义安全边界常量,用于判断节点编号是否越界
  • 作用:引入标准库并定义题目给出的上限阈值 10121012 ,作为后续判断是否进入“虚层”的标准。
2. 输入与初始化
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0); // 关闭输入输出同步,提升大数据量下的读取速度
    int n; // 记录总的移动次数
    long long s; // 记录当前真实的节点编号(必须用 long long 防溢出)
    string ops; // 存储长度为 n 的移动指令序列
    cin>>n>>s>>ops; // 读入移动次数、初始节点和指令字符串
    int level=0; // 核心变量:记录超出 LIMIT 范围的相对层数(虚层),0 表示在安全范围内
  • 作用:完成基础数据的读取,并初始化“虚层”计数器 level。
3. 核心模拟循环:向上移动 (U)
    for(int i=0;i<n;i++){ // 遍历整个指令字符串,对每一条指令进行实时决策
        char op=ops[i]; // 取出当前第 i 步的移动指令字符
        if(op=='U'){ // 如果当前指令是向上移动到父节点
            if(s==1) continue; // 特判:如果已经在根节点(编号为1),无法继续向上,直接跳过
            if(level>0){ // 如果当前处于“虚层”(编号过大被隐藏了),向上走一步相当于减少一层虚层
                level--;
            }else{ // 如果在真实编号的安全范围内,正常执行除以 2 找父节点
                s/=2;
            }
        }
  • 作用:处理向上移动逻辑。优先消耗虚层深度,虚层耗尽后才执行真实的除法操作。
4. 核心模拟循环:向左/右移动 (L / R)
        else if(op=='L'){ // 如果当前指令是向左儿子移动 (理论编号 * 2)
            // 如果已经在虚层,或者下一步计算会超出限制,就只增加虚层层级,不实际计算编号
            if(level>0||s*2>LIMIT){
                level++;
            }else s*=2; // 在安全范围内,正常计算编号
        }
        else if(op=='R'){ // 如果当前指令是向右儿子移动 (理论编号 * 2 + 1)
            // 同理,如果超出限制则只增加虚层层级
            if(level>0||s*2+1>LIMIT){
                level++;
            }else s=s*2+1; // 在安全范围内,正常计算编号
        }
    }
  • 作用:处理向下移动逻辑。通过预判 s*2 或 s*2+1 是否越界,决定是真实计算还是仅仅记录虚层。
5. 输出与结束
    cout<<s<<endl; // 循环结束后,level 一定被减回 0,此时的 s 就是最终答案,直接输出
    return 0; // 结束程序
}
  • 作用:输出最终停留在的安全节点编号。由于题目保证最终结果不越界,循环结束时 level 必然归零。

📊 核心逻辑总结表

代码模块核心变量/操作精炼作用解决的痛点
边界定义LIMIT = 1e12设定安全阈值为判断是否溢出提供量化标准
状态记录level记录虚层深度避免在树极深处进行大数运算导致溢出
向上移动level-- / s/=2优先回退虚层确保从极深节点返回时不会发生除零或错误计算
向下移动level++ / s*=2预判越界并标记拦截即将溢出的乘法操作,将其转化为安全的层级记录
根节点特判if(s==1) continue防止无效操作避免在根节点执行 U 操作时产生逻辑错误
GESP六级真题考点分析和解题思路 本文分析了GESP六级考试的18道真题,涵盖动态规划、树形结构、图论算法等核心考点。重点题目包括下楼梯(动态规划)、工作沟通(LCA算法)、运送物资(网络流)等。试题难度以普及级为主,涉及拓扑排序、树形DP、二分答案等典型算法。备考建议掌握动态规划状态转移、树结构的DFS遍历、图论算法实现等关键技能,并熟悉提供的代码模板(如拓扑排序和树直径计算)。通过系统练习这些高频题型和算法模板,可以有效提升六级考试通过率。 阅读详情

相关推荐

个人信息保护合规审计人员(中级)能力测试试卷

本文是关于个人信息保护合规考试的试题解析,内容涵盖《个人信息保护法》相关规定。试卷包含单选题、多选题、判断题、简答题和案例分析题五种题型,总分100分,考试时间120分钟。试题重点考察个人信息处理的基本原则、敏感个人信息处理要求、合规审计流程、个人信息保护影响评估等内容。通过案例分析题详细解析了人脸识别登录、数据共享、跨境传输等场景下的合规要求。参考答案均严格依据《个人信息保护法》等法律法规,为个人信息处理活动提供了明确的合规指引。

qq_41525079的博客 858

打卡信奥刷题(886)用C++信奥P11375[普及组/提高] [GESP202412 六级] 树上游走

小杨有一棵包含无穷节点的二叉树(即每个节点都有左儿子节点和右儿子节点;除根节点外,每个节点都有父节点),其中根节点的编号为1,对于节点i,其左儿子的编号为2×i,右儿子的编号为2×i1。小杨会从节点s小杨想知道移动n次后自己所处的节点编号。1012。

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

AI视频生成提示词工程:结构化公式与实战案例详解

在实际使用 AI 生成视频或图像时,最常遇到的困惑是:为什么我的提示词(Prompt)生成的画面总是不理想?是模型能力不足,还是我的描述有问题?答案往往是后者。提示词工程(Prompt Engineering)并非简单的“翻译”需求,而是一门需要结构化思维和精准描述的技能。它决定了 AI 能否准确理解你的意图,并生成符合预期的视觉内容。 本文将通过两个核心案例,深入拆解提示词的构建逻辑。第一个案例聚焦于“文生视频”,我们将学习如何将一个简单的想法,如“小猫在雪地里玩雪球”,通过结构化公式扩展为一段富有细节和

weixin_30800987的博客 565

洛谷 P11375:[GESP202412 六级] 树上游走

题目只说最后所处的节点编号不超过 10^12,没有说经过的节点编号不超过 10^12,甚至会超过 long long 的范围 10^18 而爆掉。不过据题意,即便经过的编号超过了 10^12,最终还是会返回编号不超过 10^12 的位置,因此当遇到的编号超过 10^12 时,可无视即不移动。

hnjzsyjyj的专栏 1543

SMETANA 安装使用教程

关于SMETANA的安装和简单使用信息

qq_44940977的博客 1173

IBTrACS v04r01 数据提取实战:Pandas 筛选 JTWC/CMA/JMA 3机构最佳路径数据

本文详细介绍了如何使用 Pandas 高效提取和处理 IBTrACS v04r01 数据集中的最佳路径数据,特别针对 JTWC、CMA 和 JMA 三家权威机构的数据进行对比分析。通过构建可复用的数据提取函数,解决多机构数据质量差异问题,并提供高级分析与可视化应用示例,助力热带气旋研究。

clijovtbq401783153的博客 517

《P11375 [GESP202412 六级] 树上游走》

这篇内容描述了一个关于无限二叉树节点移动的问题。给定初始节点s和n次移动操作(U/L/R分别表示向上、向左、向右移动),要求计算移动后的最终节点编号。 关键点: 使用二进制路径表示法存储节点位置(0表示左子节点,1表示右子节点) 初始时将节点s转换为二进制路径 根据移动指令修改路径: U:删除路径末尾(向上移动) L/R:在路径末尾添加0/1(向下移动) 算法复杂度为O(n),适用于n≤10^6的情况。示例输入"3 2 URR"的输出为7,对应路径2→1→3→7的移动过程。

Jasmine_llq的博客 178

kbjdbc: autodetected server-encoding to be ISO-8859-1, if the message is not readable, please check

这条信息是来自 KingbaseES 数据库的一个 JDBC 客户端连接提示。KingbaseES 是一个企业级的关系型数据库管理系统,它兼容 PostgreSQL 的许多特性。如果上述步骤仍然无法解决问题,建议详细查看数据库和客户端的日志文件,以获取更具体的错误信息。此外,也可以考虑联系 KingbaseES 的技术支持获取帮助。项目融合kingbase数据库,输出日志乱码。结果:网上各种调整各种试。

zjy660358的专栏 4851

洛谷 P11375 [GESP202412 六级] 树上游走-普及-

小杨有一棵包含无穷节点的二叉树(即每个节点都有左儿子节点和右儿子节点;除根节点外,每个节点都有父节点),其中根节点的编号为。题目比较简单,但是需要注意,过程中数字可能会超过限制,所以要先化简再计算。输出一个正整数,代表最后所处的节点编号。的字符串,代表每次移动的方式,其中。,代表移动次数和初始节点编号。次后自己所处的节点编号。代表第 1 种移动方式,代表第 2 种移动方式,代表第 3 种移动方式。第一行包含两个正整数。第二行包含一个长度为。对于全部数据,保证有。

weixin_37253733的博客 603

从零到一:ESP32与豆包大模型的RTC连续对话实现指南

文本实现ESP32S3 SparkBot与豆包大模型的RTC连续对话

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 4366

假新闻检测论文分享(25)L-DefenseExplainable Fake News Detection With Large Language Model

现有的假新闻检测工作主要集中在通过深度网络结合多种信息来学习假新闻的潜在特征,如可信度、立场、传播模式、额外知识、域外数据等。尽管他们在探测上取得了成功,但受限于他们的黑箱性质,他们无法提供任何对公众至关重要的理由。为解决这一问题,一些研究致力于可解释假新闻检测(EFND),旨在同时生成准确性预测和解释。许多工作通过注意力机制在相关报道中注意突出特别的单词、短语或句子来提供可解释性。然而,这些工作只发现了对最终预测有高贡献的区域,缺乏直观和可信的解释。

weixin_41964296的博客 732

[GESP202412 六级] 树上游走

本文介绍了C++ GESP专栏中的二叉树移动问题P11375。题目描述了一个无限节点的二叉树结构,要求根据给定的移动指令序列(U/L/R分别表示向上、向左、向右移动),计算n次移动后的最终节点编号。文章提供了两种代码解决方案:基础版仅处理输入输出,改进版则通过虚拟层数cnt处理超出范围的情况,确保正确计算最终节点位置。样例展示了从节点2出发经过"URR"移动后到达节点7的过程。该问题适用于不同规模的数据,要求最终结果不超过10^12。

m0_37807231的博客 249

怀旧版电脑GBC模拟器

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

CCF-GESP计算机学会等级考试2024年12月六级C++T1树上游走

小杨有一棵包含无穷节点的二叉树(即每个节点都有左儿子节点和右儿子节点;除根节点外,每个节点都有父节点),其中根节点的编号为1,对于节点i,其左儿子的编号为2×i,右儿子的编号为2×i1。小杨会从节点s小杨想知道移动n次后自己所处的节点编号。1012。

长春高老师编程 862

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

老版QQ原生表情gif动态

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

GESP认证C++编程真题解析 | 202412 六级

小杨有一棵包含无穷节点的二叉树(即每个节点都有左儿子节点和右儿子节点;除根节点外,每个节点都有父节点),其中根节点的编号为。《洛谷 P11375 树上游走》 #模拟# #高精度# #栈# #GESP# #2024#输出一个正整数,代表最后所处的节点编号。的字符串,代表每次移动的方式,其中。,代表移动次数和初始节点编号。次后自己所处的节点编号。代表第 1 种移动方式,代表第 2 种移动方式,代表第 3 种移动方式。洛谷:[P11375。第一行包含两个正整数。第二行包含一个长度为。

团爸讲算法 1498

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【GESP2412六级】树上游走 运送物资

【GESP2412六级】树上游走 运送物资

青少年趣味编程 610

记——那次难忘的GESP六级考试(202603)+编程题题解

本文记录了作者参加GESP六级考试的全过程,重点描述了备考和考试当天的经历。作者详细列出了自己完成的13道编程题目及解题思路,包括DP、贪心、树状数组等算法题,同时也提到未完成的8道题目。考试当天经历了忘带鼠标的意外,利用触控板继续练习。文章还提到选择题涉及动态规划、树遍历等基础知识,整体展现了作者从紧张备考到从容应考的心路历程,以及面对突发状况的应对能力。

2401_84010520的博客 641

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

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

Mysssone的博客 395

【算法拾光】队列|在每个树⾏中找最⼤值 + 最后⼀块⽯头的重量

本文总结两道经典算法题:一是通过层序遍历(BFS)逐层找最大值,利用队列分层处理,每层维护最大值;二是用大根堆(优先队列)模拟石头碰撞过程,每次取最大两块石头,差值重新入堆,直至剩余一块或无石。前者适用于树的层次遍历,后者适合动态获取最值场景。核心思想:队列用于分层遍历,堆用于高效取极值。

wuqingyigexiaoba的博客 185

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

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

wuqingyigexiaoba的博客 334

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 315

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 609

优选算法:分治-归并排序

交易逆序对的总数

Wangshijie1015的博客 149

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 26
上一篇: P11247 [GESP202409 六级] 算法学习
下一篇: P11376 [GESP202412 六级] 运送物资
谢天谢地AC了 | 信奥教练
博客等级 码龄1年 53粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值