#P12601. 旷野小计算
旷野小计算
题目背景
原题来自 2025 年洛谷愚人节比赛的 E 题。
提示:若是使用“提交代码”的方式进行提交,在评测时会给程序输入一个数字(1, 2, 3, ..., 7)表示测试点编号,请在程序中直接输出对应测试点的答案。
题目描述
关于什么是寄存器:理解成变量即可。
您需要编写指令,完成给定的计算任务。
在以下指令中,小写字母 v
开头的参数表示十进制无符号常数,大写字母 R
开头的参数表示寄存器。寄存器均为 64 位无符号整数。您可以自由使用的寄存器有六个:a
、b
、c
、d
、x
、y
。除非特别说明,否则所有寄存器初始值均为 。
指令格式 | 描述 |
---|---|
+ R1 R2 |
使 R1 寄存器加上 R2 的值 |
- R1 R2 |
使 R1 寄存器减去 R2 的值 |
< R1 v |
使 R1 寄存器左移 位,低位补 0 |
> R1 v |
使 R1 寄存器右移 位,高位补 0 |
^ R1 R2 |
使 R1 寄存器异或上 R2 的值 |
! R1 |
输出 R1 寄存器的值 |
= R1 v |
使 R1 寄存器的值变为 |
* R1 R2 |
使 R1 寄存器乘上 R2 的值 |
/ R1 R2 |
使 R1 寄存器除以 R2 的值 |
编号 | 输入方式 | 任务 | PC 数限制 | 特殊条件 | 分值 |
---|---|---|---|---|---|
1 | 寄存器 x 里保存 |
输出 | |||
2 | 输出 (下取整) | 在 32 位无符号整数范围内 | |||
3 | 输出 | 保证 不为 | |||
4 | 寄存器 x 、y 里保存 、 |
输出 的值 | 答案自然溢出即可(即对 取模) | ||
5 | 输出 的值 (下取整) | 和 在 32 位无符号整数范围内,保证 不为 | |||
6 | 寄存器 x 里保存 |
输出 的值 (下取整) | |||
7 | 输出大于等于 的最小的 的次幂 | 保证 不为 且答案在 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 数限制 表示:
- 当运行的指令条数 时,获得该测试点的全部分数;
- 当运行的指令条数 时,不得分;
- 当运行的指令条数 时,获得该测试点 的分数(即:线性衰减)。
-
常数、乘法、除法指令(即表格中后三条指令)是非常昂贵的,使用了就会扣除所有的分数。
因此,两个样例的输出实际均不能得到分数。
附件提供 chk.exe
,供交互式运行指令,输入单条指令回车后即可运行。为方便给寄存器赋值,额外提供指令(评测机内不识别该指令):
指令格式 | 助记符格式 | 说明 |
---|---|---|
? R1 |
read R1 |
从标准输入读入一个 64 位无符号整数,保存到 R1 寄存器中 |