A. 第1题-复杂度嵌套路径

第1题-复杂度嵌套路径

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目内容

某巡检平台用脚本扫描数据。脚本有 LL 行,每行是下面两种之一(单词、变量、常数之间以空格分隔):

  • FOR x a b:进入一层循环,循环变量为小写字母 xx,下界 aa、上界 bb 均为闭区间。aa、bb 各自要么是正整数,要么是规模符号 nn。
  • END:退出最近一层尚未退出的 FOR循环。

规模 nn 视为正无穷大,大于脚本里出现的任何正整数。

一层循环是否执行,以及它对复杂度的贡献,按下面规则判断(若某一外层循环不执行,则它内部的所有语句均不会执行,对复杂度不产生贡献):

  • aa、bb 都是整数且 a≤ba \le b,或 aa、bb 都是 nn:该层循环执行常数次,对复杂度指数贡献 00;
  • aa 为整数且 bb 为 nn:该层循环执行nn次,对复杂度指数贡献 11;
  • aa 为 nn 且 bb 为整数,或 aa、bb 都是整数且 a>ba > b:该层循环一次也不执行,该层及其内部所有语句均不会执行。

对于脚本执行过程中的任意位置,设当前所有尚未结束且实际会执行的循环中,对复杂度指数贡献为 11 的循环共有 tt 层,则当前位置的复杂度为 ntn^t。

整段脚本的复杂度指数 ww,定义为整个脚本执行过程中出现过的最大 tt,因此整段脚本的复杂度为 nwn^w。当 w=0w=0 时,复杂度记为 1。

例如,两层贡献为 11 的循环互相嵌套时,复杂度为 n2n^2;而两个贡献为 11 的循环先后执行、互不嵌套时,复杂度仍为 n1n^1。

脚本第一行会给出声明值,格式为 1 或 n^k(k≥1k \ge 1)。

仅当 FOR / END 无法一一配对时,脚本不合法。循环变量允许重复使用:例如先后或嵌套出现两个 FOR i a b,变量名 ii 仍然合法,按各自所在层照常计算复杂度。

合法且实际复杂度与声明一致,输出 Yes;合法但与声明不一致,输出 No;不合法输出 ERR。

输入描述

第一行两个内容:LL 和声明值(1 或 n^k)。

接下来 LL 行,为脚本正文。

约束

1≤L≤1001 \le L \le 100

循环变量为单个小写字母

正整数在 [1,100][1,100] 内

声明中若为 nkn^k,则 1≤k≤81 \le k \le 8

输出描述

输出一行:Yes、No 或 ERR。

样例1

输入

4 n^2
FOR i 1 n
FOR j 1 n
END
END

输出

Yes

说明

两层循环都是「从常数到 nn」,且互相嵌套,因此同时执行时复杂度指数为 22,实际复杂度为 n2n^2,与声明一致。

样例2

输入

4 n^1
FOR i n 5
FOR j 1 n
END
END

输出

No

说明

外层下界为 nn、上界为 55。由于 nn 充分大,因此外层循环一次也不执行,内部的循环也不会执行。

实际复杂度为 1,与声明的 n^1 不一致。

样例3

输入

8 n^2
FOR i 1 n
FOR j 1 n
END
FOR k 1 9
FOR p 1 n
END
END
END

输出

Yes

说明

FOR i 在最外层,对复杂度指数贡献 11。它内部有两段彼此不嵌套的循环结构:

  • FOR j 1 n:对复杂度指数贡献 11,与外层 i 同时执行时,总指数为 1+1=21+1=2;
  • FOR k 1 9:只执行常数次,对复杂度指数贡献 00;其内层 FOR p 1 n 对复杂度指数贡献 11,因此与外层 i 同时执行时,总指数为 1+0+1=21+0+1=2。

整个脚本执行过程中出现的最大复杂度指数为 22,因此实际复杂度为 n2n^2,与声明一致。

样例4

输入

4 n^2
FOR i 1 n
FOR i 1 n
END
END

输出

Yes

说明

内外两层都使用循环变量 ii,这是合法的。两层都是从常数到 nn,互相嵌套,同时执行时复杂度指数为 22,与声明 n2n^2 一致。

非AI方向-华为机考模拟赛-2026秋招第四场

Not Attended
Status
Done
Rule
IOI
Problem
3
Start at
2026-9-17 19:00
End at
2026-9-17 21:00
Duration
2 hour(s)
Host
Partic.
73