[CTSC1998] 算法复杂度
题目背景
CTSC1998 D1T3
我们在编程时,最关心的一个问题就是算法的时间复杂度。但是分析一个程序的复杂度是一项很困难的工作,在程序的码风不是很好的情况下更是如此。
所以,专门研究算法的 SERKOI 小组决定开发出一个分析程序时间复杂度的软件。由于这是一个全新的领域,所以 SERKOI 小组决定先从简单情况入手进行分析。
题目描述
为了简化问题,程序只包含循环和顺序结构,程序的结构定义如下:
$\texttt{begin <statement> end}$
一个语句块的结构是**递归定义**的,如下所示:
$\texttt{loop x <statement> end}$
或者 $\texttt{op <statement>}$
或者为 $\texttt{break <statement>}$
或者为 $\texttt{continue <statement>}$
语句块可以为空。
注意:
1. 一个程序都是以 $\texttt{begin}$ 开始,以相应的 $\texttt{end}$ 结束;
2. $\texttt{loop x <statement> end}$ 表示其中的语句重复执行 $x$ 次;
3. $\texttt{op x}$ 表示执行 $x$ 个单位操作;
4. 上面两点中的 $x$ 可以是一个正整数或 $n$;
5. $\texttt{break}$ 语句的作用是跳出这一层循环, $\texttt{continue}$ 语句的作用是跳过这一层循
环的其它语句,直接进入下一次循环。如果它($\texttt{break}$ 或 $\texttt{continue}$)不在任何一层循环中,**请忽略它们**。
你需要写一个程序,用来求出题目描述的程序的时间复杂度,并以多项式的形式输出。
注意,该多项式是关于 $n$ 的多项式,而且,**常数项和系数不能省略**。
数据保证能求出该程序的时间复杂度。
输入输出格式
输入格式
输入中包含一个完整的程序,
每两条语句之间至少用一个空格或换行符隔开。
输出格式
将计算出的时间复杂度多项式按**降幂排列**输出。
输入输出样例
输入样例 #1
begin loop n loop 3 loop n
op 20
end end end
loop n op 3 break end
loop n loop n
op 1
break
end end
end
输出样例 #1
60n^2+n+3
输入样例 #2
begin
op n
loop 3
op n
break
end
loop n
loop n
op 1
continue
op n
end
end
end
输出样例 #2
n^2+2n
说明
循环的嵌套最多不超过 $20$ 层。
保证最终时间复杂度多项式每项的系数不超过 ${10}^9$。