小码哥与机器人

小码哥新买了一个机器人,但是这个机器人因为很便宜只能做三个动作.

三个动作:前进FD,倒退BK和重复REPEAT。
FD后加数字表示前进多少步;
BK后加数字表示后退多少步;
REPEAT 后加数字再加方括号,表示重复方括号里的命令。
三个动作加的数字均为正整数。

命令的格式:
1.FD与BK命令组合;
2.REPEAT 命令内加REPEAT命令与FD、BK组合,且REPEAT排在最后。

格式

输入格式:

一行字符串(长度不超过200)。

输出格式:

表示最后得到的步数,表示离起点的距离(非负整数)。

样例 1

输入:

REPEAT 5[ FD 50 REPEAT 10[FD 100]]

输出:

5250

 

#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <cstdio>
#include <string>
using namespace std;
typedef long long ll;
const int N = 5010;
//int a[100];

int mod = 1e9 + 7;
//int n[100010];
map<string, int>mp;
string s;
//string a[210];
int c[210];
char a, q;

ll sum() {
	ll k = 0, n;
	char a, q;
	while (cin >> a) {  //输入三个动作的第一个字母,表示所做动作
		if (a == ']') {  //每遇到],说明递归一次
			break;
		}
		cin >> s >> n;   //输入所做动作除去第一个字母以外的字符串,以及所做动作的步数
		if (a == 'R') {    //若遇到R则为重复括号里面的动作
			cin >> q;       //动作为REPEAT时,所重复的次数后面带一个[,记录[
			k += n * sum();//使用递归的方法算[]里面的步数
		}
		if (a == 'B') {   //当遇到B时,为后退的步数
			k -= n;
		}
		if (a == 'F') {   //当遇到B时,为前进的步数
			k += n;
		}
	}
	return k;
}


int main() {
	
	cout << abs(sum()) << endl;
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值