#P12601. 旷野小计算

旷野小计算

题目背景

原题来自 2025 年洛谷愚人节比赛E 题


提示:若是使用“提交代码”的方式进行提交,在评测时会给程序输入一个数字(1, 2, 3, ..., 7)表示测试点编号,请在程序中直接输出对应测试点的答案。

题目描述

关于什么是寄存器:理解成变量即可。

您需要编写指令,完成给定的计算任务。

在以下指令中,小写字母 v 开头的参数表示十进制无符号常数,大写字母 R 开头的参数表示寄存器。寄存器均为 64 位无符号整数。您可以自由使用的寄存器有六个:abcdxy。除非特别说明,否则所有寄存器初始值均为 00

指令格式 描述
+ R1 R2 使 R1 寄存器加上 R2 的值
- R1 R2 使 R1 寄存器减去 R2 的值
< R1 v 使 R1 寄存器左移 vv 位,低位补 0
> R1 v 使 R1 寄存器右移 vv 位,高位补 0
^ R1 R2 使 R1 寄存器异或上 R2 的值
! R1 输出 R1 寄存器的值
= R1 v 使 R1 寄存器的值变为 vv
* R1 R2 使 R1 寄存器乘上 R2 的值
/ R1 R2 使 R1 寄存器除以 R2 的值
编号 输入方式 任务 PC 数限制 特殊条件 分值
1 寄存器 x 里保存 xx 输出 4080x4080x 5+155\color{green}+15 1010
2 输出 x4080\frac{x}{4080}(下取整) 16+816\color{green}+8 xx 在 32 位无符号整数范围内
3 输出 40804080 保证 xx 不为 00
4 寄存器 xy 里保存 xxyy 输出 x×yx \times y 的值 1024+5121024\color{green}+512 答案自然溢出即可(即对 2642^{64} 取模)
5 输出 xy\frac x y 的值 (下取整) xxyy 在 32 位无符号整数范围内,保证 yy 不为 00 2020
6 寄存器 x 里保存 xx 输出 x\sqrt x 的值 (下取整) 1024+163841024\color{green}+16384
7 输出大于等于 xx 的最小的 22 的次幂 96+12896\color{green}+128 保证 xx 不为 00 且答案在 64 位无符号整数范围内

输入格式

一行一个整数,表示任务编号。

输出格式

若干行,一行一条指令。指令格式如题干所述。

为了方便有基础的选手更清晰地阅读代码,除了按照题干所述的方式书写指令,允许使用助记符格式。

指令格式 助记符格式 寄存器名 助记符格式
+ R1 R2 add R1, R2 a rax
- R1 R2 sub R1, R2 b rbx
< R1 v shl R1, v c rcx
> R1 v shr R1, v d rdx
^ R1 R2 xor R1, R2 x rsi
! R1 write R1 y rdi
= R1 v movabs R1, v
* R1 R2 mul R1, R2
/ R1 R2 div R1, R2

另外,可使用英文分号 ; 书写单行注释,如:

xor rax, rax    ; set rax to 0
1
见附件 sample1.txt
3
= a 4080
! a

提示

请注意:

  • 程序的大小非常关键,运行的指令条数超过了 PC 数限制就会扣除分数。PC 数限制 x+yx\color{green}+y 表示:

    • 当运行的指令条数 cxc \le x 时,获得该测试点的全部分数;
    • 当运行的指令条数 c>x+yc >x+y 时,不得分;
    • 当运行的指令条数 c(x,x+y)c \in (x, x+y) 时,获得该测试点 (x+yc)/y×100%(x+y-c)/y\times 100\% 的分数(即:线性衰减)。
  • 常数、乘法、除法指令(即表格中后三条指令)是非常昂贵的,使用了就会扣除所有的分数。

因此,两个样例的输出实际均不能得到分数。

附件提供 chk.exe,供交互式运行指令,输入单条指令回车后即可运行。为方便给寄存器赋值,额外提供指令(评测机内不识别该指令):

指令格式 助记符格式 说明
? R1 read R1 从标准输入读入一个 64 位无符号整数,保存到 R1 寄存器中