[NOIP2017 提高组] 时间复杂度

题目背景

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 表示循环体结束。循环体结束时,这个循环体新建的变量也被销毁。

注:本题中为了书写方便,在描述复杂度时,使用大写英文字母 O⁡O 表示通常意义下 ΘΘ 的概念。

输入格式

输入文件第一行一个正整数 �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

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值