2026/2/18 13:56:52
网站建设
项目流程
金融产品做网站推广,网站建设公司怎么寻找客户呢,网站建设分为什么,订阅号做微网站欢迎大家订阅我的专栏#xff1a;算法题解#xff1a;C与Python实现#xff01; 本专栏旨在帮助大家从基础到进阶 #xff0c;逐步提升编程能力#xff0c;助力信息学竞赛备战#xff01;
专栏特色 1.经典算法练习#xff1a;根据信息学竞赛大纲#xff0c;精心挑选…欢迎大家订阅我的专栏算法题解C与Python实现本专栏旨在帮助大家从基础到进阶 逐步提升编程能力助力信息学竞赛备战专栏特色1.经典算法练习根据信息学竞赛大纲精心挑选经典算法题目提供清晰的代码实现与详细指导帮助您夯实算法基础。2.系统化学习路径按照算法类别和难度分级从基础到进阶循序渐进帮助您全面提升编程能力与算法思维。适合人群准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生希望系统学习C/Python编程的初学者想要提升算法与编程能力的编程爱好者附上汇总帖GESP认证C编程真题解析 | 汇总【题目来源】洛谷[P11375 GESP202412 六级] 树上游走 - 洛谷【题目描述】小杨有一棵包含无穷节点的二叉树即每个节点都有左儿子节点和右儿子节点除根节点外每个节点都有父节点其中根节点的编号为1 11对于节点i ii其左儿子的编号为2 × i 2\times i2×i右儿子的编号为2 × i 1 2\times i 12×i1。小杨会从节点s ss开始在二叉树上移动每次移动为以下三种移动方式的任意一种第 1 种移动方式如果当前节点存在父亲节点向上移动到当前节点的父节点否则不移动第 2 种移动方式移动到当前节点的左儿子第 3 种移动方式移动到当前节点的右儿子。小杨想知道移动n nn次后自己所处的节点编号。数据保证最后所处的节点编号不超过10 12 10^{12}1012。【输入】第一行包含两个正整数n nn和s ss代表移动次数和初始节点编号。第二行包含一个长度为n nn且仅包含大写字母U \tt{U}U、L \tt{L}L和R \tt{R}R的字符串代表每次移动的方式其中U \tt{U}U代表第 1 种移动方式L \tt{L}L代表第 2 种移动方式R \tt{R}R代表第 3 种移动方式。【输出】输出一个正整数代表最后所处的节点编号。【输入样例】3 2 URR【输出样例】7【算法标签】《洛谷 P11375 树上游走》 #模拟# #高精度# #栈# #GESP# #2024#【代码详解】#includebits/stdc.husingnamespacestd;#defineintlonglong// 将int定义为long long类型防止溢出intn;// 操作序列的长度intx;// 当前节点编号string s;// 操作序列dequechardq;// 双端队列用于存储简化后的操作signedmain()// 因为定义了#define int long long所以用signed代替int{// 输入操作序列长度n初始节点x操作序列scinnxs;// 在字符串前加空格使下标从1开始方便处理s s;// 第一步简化操作序列// 核心思想删除无用的操作对如LRU、LUR、RLU、RUL等for(inti1;in;i){if(dq.empty()){// 如果队列为空直接加入当前操作dq.push_back(s[i]);}elseif(dq.back()!Us[i]U){// 关键优化如果队列尾部不是U且当前操作是U// 那么前一个操作和当前的U会相互抵消// 例如LU 回到原位置RU 回到原位置dq.pop_back();// 删除前一个操作}else{// 其他情况直接加入当前操作dq.push_back(s[i]);}}// 第二步执行简化后的操作序列while(!dq.empty()){charcdq.front();// 从队列头部取操作dq.pop_front();// 删除已取出的操作if(cUx1){// U移动到父节点x/2;// 在完全二叉树中父节点编号是子节点编号除以2}elseif(cL){// L移动到左子节点x*2;// 左子节点编号是当前节点编号乘以2}elseif(cR){// R移动到右子节点xx*21;// 右子节点编号是当前节点编号乘以2加1}}// 输出最终节点编号coutxendl;return0;}【运行结果】3 2 URR 7