小码哥新买了一个机器人,但是这个机器人因为很便宜只能做三个动作.
三个动作:前进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;
}