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

三个动作:前进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;
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐