本题的算法标签是「栈」。先把 expr 的语法看清楚,它是递归定义的:
c,流量为 flow[c - 'a'];n[X],把 X 的总流量乘以条数 n 后作为当前层的一个元素;n 可以省略,省略时等价于 1[X];ab 是 flow(a) + flow(b);[] 内没有任何支流,本层总流量为 0。某河流水系呈嵌套结构,用字符串表示。水系由若干基础溪流和汇入结构组成,规则如下:
a~z 表示,各对应一个流量值(见输入的溪流流量表)。流量表按字母顺序依次给出,即 a 对应表中第 1 个值、b 对应第 2 个值,以此类推。n[X] 表示 n 条相同的支流结构 X 汇入当前水系,支流总流量为 n×flow(X)。其中 n 为正整数,1≤n≤99;条数为 1 时 1 可省略,即 [X] 等价于 1[X]。ab 的流量为 flow(a)+flow(b)。] 闭合时,括号内支流总流量乘以条数 n 汇入上一级,外层总流量为 n× 括号内流量。[]),即该层括号内没有任何支流,则该层支流总流量为 0。输入只有一行,形如:
[f0, f1, ..., f(count-1)],"expr"
即先用方括号包住整个流量表,元素之间用半角逗号分隔;方括号之后紧跟一个半角逗号,再给出用双引号包住的字符串 expr。本题样例中数组内的逗号后都带一个空格(例如 [10, 20, 30],"2[a3[b]c]"),你的读入代码需要容忍任意多余空白。
取值范围:
count 为 flow 的长度,也是溪流种类数;expr 仅包含小写字母、数字和方括号 [],方括号成对出现;[ 之前,且 1≤n≤99;expr 中的小写字母均在 flow 给定范围内,但不要求从 a 开始;输出一行一个十进制整数,表示河流水系的总流量。
输入
[10, 20, 30],"2[a3[b]c]"
输出
200
说明
a = 10,b = 20,c = 30;a(10)+ 3 条 b(3×20=60)+ c(30)=100;2 条 ×100=200。输入
[10, 20, 30, 40, 50],"3[c2[e]]"
输出
390
说明
a = 10,b = 20,c = 30,d = 40,e = 50(expr 未从 a 开始,且未用到 b、d);c(30)+ 2 条 e(2×50=100)=130;3 条 ×130=390。输入
[10, 20],"2[ab]"
输出
60
说明
a = 10,b = 20;a(10)+ b(20)=30;2 条 ×30=60。
Scan the QR code below with WeChat to sign in
设置一个用户名,下一步用微信扫码完成注册
请使用微信扫描下方二维码完成注册