luogu#P5698. [CTSC1998] 算法复杂度

[CTSC1998] 算法复杂度

题目背景

CTSC1998 D1T3

我们在编程时,最关心的一个问题就是算法的时间复杂度。但是分析一个程序的复杂度是一项很困难的工作,在程序的码风不是很好的情况下更是如此。

所以,专门研究算法的 SERKOI 小组决定开发出一个分析程序时间复杂度的软件。由于这是一个全新的领域,所以 SERKOI 小组决定先从简单情况入手进行分析。

题目描述

为了简化问题,程序只包含循环和顺序结构,程序的结构定义如下:

begin <statement> end\texttt{begin <statement> end}

一个语句块的结构是递归定义的,如下所示:

loop x <statement> end\texttt{loop x <statement> end}

或者 op <statement>\texttt{op <statement>}

或者为 break <statement>\texttt{break <statement>}

或者为 continue <statement>\texttt{continue <statement>}

语句块可以为空。

注意:

  1. 一个程序都是以 begin\texttt{begin} 开始,以相应的 end\texttt{end} 结束;

  2. loop x <statement> end\texttt{loop x <statement> end} 表示其中的语句重复执行 xx 次;

  3. op x\texttt{op x} 表示执行 xx 个单位操作;

  4. 上面两点中的 xx 可以是一个正整数或 nn

  5. break\texttt{break} 语句的作用是跳出这一层循环, continue\texttt{continue} 语句的作用是跳过这一层循 环的其它语句,直接进入下一次循环。如果它(break\texttt{break}continue\texttt{continue})不在任何一层循环中,请忽略它们

你需要写一个程序,用来求出题目描述的程序的时间复杂度,并以多项式的形式输出。

注意,该多项式是关于 nn 的多项式,而且,常数项和系数不能省略

数据保证能求出该程序的时间复杂度。

输入格式

输入中包含一个完整的程序, 每两条语句之间至少用一个空格或换行符隔开。

输出格式

将计算出的时间复杂度多项式按降幂排列输出。

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

60n^2+n+3
begin
op n
loop 3
op n
break
end
loop n
loop n
op 1
continue
op n
end
end
end 
n^2+2n

提示

循环的嵌套最多不超过 2020 层。

保证最终时间复杂度多项式每项的系数不超过 109{10}^9