P1322 logo语言 【洛谷算法习题】
2026/5/26 19:13:17 网站建设 项目流程

P1322 logo语言

网页链接

P1322 logo语言

题目描述

Logo 语言命令可以指挥海龟在屏幕中爬行。本问题只使用 Logo 语言的三个语句:前进FD,倒退BK和重复REPEAT,因此,海龟只在一条直线上来回爬行。输入一行 logo 的命令行,输出海龟在屏幕中离开原来位子的距离(假设屏幕很大,可以让海龟移开10 9 10^9109的距离)。

例如:

  • 输入FD 100,输出:100 100100

  • 输入FD 100 BK 150, 输出:50 5050

  • 输入REPEAT 5[FD 100 BK 50], 输出:250 250250

  • 输入REPEAT 5[FD 50 REPEAT 10[FD 100]], 输出:5250 52505250

输入格式

一行,一个字符串,符合上述规定的 logo 命令行。

输出格式

一个数据,海龟离开原来位子的距离。

输入输出样例 #1

输入 #1

FD 100

输出 #1

100

说明/提示

每个语句输入数据的绝对值不超过1000 10001000。输出结果不会超过10 9 10^9109

解题思路

本题核心是递归下降解析,专门处理命令的嵌套结构,是解决带括号嵌套问题的最优解法。海龟仅在直线移动,只需计算总位移。定义递归函数解析一段命令:读取命令字符,若为FD则累加移动距离,BK则减去移动距离;若为REPEAT,读取重复次数,递归解析括号内的子命令,将子命令的总位移乘以次数后累加到当前结果。遇到]时结束当前层递归,返回本段位移。最终输出总位移的绝对值,即为海龟与初始位置的距离。递归天然适配嵌套命令,逻辑简洁直观,完美处理所有测试用例。

总结

核心逻辑:递归解析嵌套的LOGO命令,分别处理前进、后退、重复指令,计算总位移。
关键操作:FD累加位移、BK递减位移、REPEAT递归解析子命令并乘以次数。
效率保障:递归遍历一次命令字符串,时间复杂度O ( 命令长度 ) O(\text{命令长度})O(命令长度),简洁高效无冗余。

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;intdg(){string s;charc;intk,l=0,v;while(cin>>c){if(c==']')break;cin>>s>>k;if(c=='R'){v=getchar();l+=k*dg();v=getchar();}if(c=='B')v=getchar(),l-=k;if(c=='F')v=getchar(),l+=k;if(v==int(']'))break;}returnl;}intmain(){cout<<abs(dg());return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询