问题 6317 --4.红楼

6317: 4.红楼

题目描述

【题目背景】 一个是阆苑仙葩,一个是美玉无瑕。——《枉凝眉》 有一天 33DAI 睡觉做梦进入了喵喵幻境。喵喵幻境有一门编程语言叫做喵喵编程语言(`MeowLang`)。比如下面就是一段计算 `A+B` 的代码: ``` MiaoMiaoMiaoMiaoMiaoMiaoMiaoMiao; MiaoMiaoMiaoMiaoMiao; ;MiaoMiaoMiao;MiaoMiao; MiaoMiaoMiaoMiao; MiaoMiaoMiao; MiaoMiaoMiaoMiao; MiaoMiaoMiaoMiao; MiaoMiaoMiaoMiaoMiaoMiao; MiaoMiaoMiaoMiaoMiao; MiaoMiao; MiaoMiaoMiao; MiaoMiaoMiaoMiao; MiaoMiao; Miao; MiaoMiaoMiao; ``` 这个程序可以输出第二行的两段 `Miao` 的数量之和个猫猫表情,可以在 [Meowlang Interpreter](https://wixette.github.io/meowlang/)、或者使用下面的 C++ 解释器测试运行这段代码。 请你写一段 C++ 代码,实现输入输出一个喵喵程序代码,保证运行后可以一共输出 $n$ 个猫猫表情。 ## 喵喵编程语言参考手册 本题使用中文拼音语境下的喵喵编程语言,只能使用两种字符串:`Miao` 和 `;`,所有这两种字符串之间的多余空格和换行都将被忽略。 ### **对应到整数列表** 一段喵喵编程语言的代码可以包含多条语句,每条语句都包含若干个 `Miao` 且以 `;` 结尾。假设有 $n$ 条语句,则解释器会先计算出每条语句中 `Miao` 的数量,并得到一个包含 $n$ 个整数的列表 $a_0\sim a_{n-1}$。 比如下面这段代码对应的列表初始为:`[0,1,2,4,3]` ``` ;Meow;Meow Meow;Meow Meow Meow Meow;Meow Meow Meow; ``` ### **程序运行** 程序运行时有下面几种变量: - `IP`:当前执行的语句对应的列表下标,初始为 $0$,每次执行 `E(IP)` 对应的指令。 - `E(x)`:列表中下标为 `x` 的那一项的数字 - `T`:当前列表末尾的的数字 - `N`:`E(IP+1)`,即列表中下一项的数字。 指令集: | 指令 | 名称 | 描述 | IP 变化 | |:---:|:---:|:---:|:---:| | $0$ | `RET` 换行 | 打印一个换行符 | `IP++` | | $1$ | `MEOW` 喵 | 输出 `T` 个喵 | `IP++` | | $2$ | `PUSH` 压入 | 在列表末尾添加一项,添加的数字为 `N` | `IP+=2` | | $3$ | `POP` 弹出 | 删除列表末尾 | `IP++` | | $4$ | `LOAD` 载入 | 把 `E(N)` 压入列表末尾 | `IP+=2` | | $5$ | `SAVE` 储存 | 把 `E(N)` 修改为列表末尾的元素的值 | `IP+=2` | | $6$ | `ADD` 加法 | 把列表末尾两项相加,弹出末尾两项,然后把和压入列表末尾 | `IP++` | | $7$ | `SUB` 减法 | 计算列表倒数第二项减去最后一项的差,弹出末尾两项,
把差压入队列末尾,如果差为负数,会压入 `0` | `IP++` | | $8$ | `JMP` 跳转 | 将 `IP` 设置为 `N` | `IP=N` | | $9$ | `JE` 比较 | 如果列表最后一项是 $0$,将 `IP` 设置为 `N`,
否则设置为 `IP+2` | `IP = (T == 0)`
` ? N : IP + 2` | | $\ge 10$ | `NOP` 跳过 | 跳过当前指令 | `IP++` | ### **本题规定** - 程序中的 `Miao` 一共不能超过 $10^4$ 个。 - 任意时刻列表总长度都不能超过 $1000$。 - 涉及到 `N`、`E(x)`、末尾两项的操作,必须存在对应项。 - 最多只能执行 $10^6$ 次指令。 - 当 `IP` 超过列表范围时停止程序。 详细请看下面 C++ 解释器中的代码。 ### **C++ 解释器** 为了更好理解喵喵编程语言,我用 `C++` 写了一个语言解释器,这个代码中准确描述了本题规则,你的代码输出的程序就会使用类似这个解释器的方式运行,看看能否输出 $n$ 个喵。 - 喵喵语言解释器:[miao.cpp](/upload/atta/6317/miao.cpp) - 斐波那契数列算法的喵喵语言代码:miao.txt

输入

输入一个整数 $n$。

输出

输出一段喵喵语言的代码,要求那个代码会无换行的输出 $n$ 个喵。

样例输入输出

输入#1 复制
5
输出#1 复制
MiaoMiaoMiaoMiaoMiaoMiaoMiaoMiao; MiaoMiaoMiaoMiaoMiao;
;MiaoMiaoMiao;MiaoMiao;

MiaoMiaoMiaoMiao; MiaoMiaoMiao;
MiaoMiaoMiaoMiao; MiaoMiaoMiaoMiao;
MiaoMiaoMiaoMiaoMiaoMiao;
MiaoMiaoMiaoMiaoMiao; MiaoMiao;
MiaoMiaoMiao;

MiaoMiaoMiaoMiao; MiaoMiao;
Miao;
MiaoMiaoMiao;

提示

这是题目给的 a+b 的代码。执行过程如下 ``` 初始列表如下 下标:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 列表:8 5 0 3 2 4 3 4 4 6 5 2 3 4 2 1 3 IP = 0,执行 JMP,跳转到 IP = 5 IP = 5,执行 LOAD,N=E[6]=3,把 E[N]=E[3]=3 压入列表末尾,IP+=2 IP = 7,执行 LOAD,N=E[8]=4,把 E[N]=E[4]=2 压入队列末尾,IP+=2 下标:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 列表:8 5 0 3 2 4 3 4 4 6 5 2 3 4 2 1 3 3 2 IP = 9,执行 ADD,把末尾两项相加,IP++ 下标:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 列表:8 5 0 3 2 4 3 4 4 6 5 2 3 4 2 1 3 5 IP = 10,执行 SAVE,N=E[11]=2,把末尾 5 存入 E[N] 即 E[2],IP+=2 下标:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 列表:8 5 5 3 2 4 3 4 4 6 5 2 3 4 2 1 3 5 IP = 12,执行 POP 去掉列表末尾,IP++ 下标:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 列表:8 5 5 3 2 4 3 4 4 6 5 2 3 4 2 1 3 IP = 13,执行 LOAD,N=E[14]=2,把 E[N]=E[2]=5 压入列表末尾,IP+=2 下标:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 列表:8 5 5 3 2 4 3 4 4 6 5 2 3 4 2 1 3 5 IP = 15,执行 MEOW,喵列表末尾那么多下,输出了 5 个喵,IP++ IP = 16,执行 POP,弹出列表末尾,IP++ 下标:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 列表:8 5 5 3 2 4 3 4 4 6 5 2 3 4 2 1 3 IP = 17 结束。 ``` 显然其实在算完 `ADD` 之后直接 `MEOW` 然后结束就好了。或者直接末尾放五个 `Miao`,然后开头 `MEOW` 完直接跳转到列表外结束即可。 【数据规模与约定】 对于 $100\%$ 的数据,$1 \le n \le 10^6$。 - 子任务 1(10 分):保证 $n=1$。 - 子任务 2(20 分):保证 $n\le 100$。 - 子任务 3(30 分):保证 $n\le 1000$。 - 子任务 4(40 分):没有特殊限制。
序号 标题 作者 发表时间 费用 订购数 操作