题目背景
NOIP2017 提高组 D1T2
题目描述
小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序来判断小明对他的每个程序给出的时间复杂度是否正确。
A++语言的循环结构如下:
F i x y
循环体
E
Copy
其中F i x y
表示新建变量 �i(变量 �i 不可与未被销毁的变量重名)并初始化为 �x, 然后判断 �i 和 �y 的大小关系,若 �i 小于等于 �y 则进入循环,否则不进入。每次循环结束后 �i 都会被修改成 �+1i+1,一旦 �i 大于 �y 终止循环。
�x 和 �y 可以是正整数(�x 和 �y 的大小关系不定)或变量 �n。�n 是一个表示数据规模的变量,在时间复杂度计算中需保留该变量而不能将其视为常数,该数远大于 100100。
E
表示循环体结束。循环体结束时,这个循环体新建的变量也被销毁。
注:本题中为了书写方便,在描述复杂度时,使用大写英文字母 OO 表示通常意义下 ΘΘ 的概念。
输入格式
输入文件第一行一个正整数 �t,表示有 �t(�≤10t≤10)个程序需要计算时间复杂度。 每个程序我们只需抽取其中 F i x y
和 E
即可计算时间复杂度。注意:循环结构允许嵌套。
接下来每个程序的第一行包含一个正整数 �L 和一个字符串,�L 代表程序行数,字符串表示这个程序的复杂度,O(1)
表示常数复杂度,O(n^w)
表示复杂度为 ��nw,其中 �w 是一个小于 100100 的正整数,输入保证复杂度只有 O(1)
和 O(n^w)
两种类型。
接下来 �L 行代表程序中循环结构中的F i x y
或者 E
。 程序行若以F
开头,表示进入一个循环,之后有空格分离的三个字符(串)i x y
, 其中 �i 是一个小写字母(保证不为�n),表示新建的变量名,�x 和 �y 可能是正整数或 �n