题目背景
大宁在他家门口种了一大片土豆田,划分为 n×m 的地块。
大宁准备搭建学校的 OJ,为了测试土豆田的性能,大宁找到了你,为他的土豆编写代码。
题目描述
大宁的土豆田是以地块为单位的,每个地块里的所有土豆的集合称为一个处理单元,可以储存两个值:key(键值)和 tmp(缓存值),均为 32 位带符号整数,每个单元。可以执行若干命令。大宁会骑着自行车轮流给每个处理单元供电,顺序如图,展示的是一个被分割为 4×4 处理单元的土豆田:

单元的编号就是供电的顺序,每次按编号顺序从 1 号到 n×m 号遍历一遍。
每一次完整的遍历称为一个周期。
只有一块地上的土豆得到供电,它们才会工作,执行命令,所有命令执行完之后大宁会停止供电。
对于每一个处理单元,命令格式如下:
-
in
读取一个数,存放到该单元的 tmp 中。(如果 tmp 中有数,那么覆盖掉,以下的所有存放均如此)
-
out
输出当前处理单元的 key 值。
-
swap
交换该单元的 key 和 tmp。
-
add X
给 key 值加上 X,X 只能是一个常数或者 tmp,下同。
-
set X
把 key 值修改为 X。
-
opp
对 key 值取相反数。
-
rev
对 key 值按位取反。
-
L/R X
左/右移 key 值 X 位。
-
get u/d/l/r
将当前单元上(u)/下(d)/左(l)/右(r)面的单元的 key 值并把它复制到本单元的 tmp,位置规则按照前面的图片所示。
-
or/and/or X
对 key 值按位或/与/异或 X。
-
wait
在本次供电的时间中等待,即什么事情也不做。
-
if X
如果此时 X(只能是 key 或者 tmp )不等于 0 则在下一次供电执行该语句的下一条语句,否则跳过下一条语句,执行下下条(如果存在的话)。
-
goto Y
下一次供电从第 Y 号命令开始执行,Y 只能是常数。
-
end
强制结束所有的处理单元的命令,无视所有尚未执行的命令。
我们提供了 check.exe,把你的土豆程序 potato.out 和你想测试的输入数据 potato.in 放到与 check.exe 同文件夹下,运行之后可以在 report.txt 中查看你的程序的详细运行情况。
我们还提供了另一个样例土豆程序 example2.out,使用 2×2 处理单元的土豆程序,内容为计算一个整数 a 的 10 倍,可以自行解读(该样例并非该计算的最优解,只是为了展示命令)。
下面展示了一个 1×3 的处理单元,所有单元不一定需要全部使用。

你有以下任务需要用编写土豆程序完成:
编号 |
输入 |
输出 |
数据范围 |
处理单元大小限制 |
分数 |
补充说明 |
1 |
a,b |
b−a |
∣a∣,∣b∣≤109 |
1×3 |
7 |
无 |
2 |
a |
233×a |
1≤∣a∣≤107 |
2×2 |
9 |
3 |
∣a∣ |
1≤∣a∣≤109 |
12 |
求 a 的绝对值 |
4 |
128 个整数 ai |
∑i=1128ai |
1≤∣a∣≤2×106 |
4×2 |
无 |
5 |
a,b |
⌊2a+b⌋ |
∣a∣,∣b∣≤2.1×109 |
2×2 |
13 |
6 |
a |
popcount(a) |
∣a∣≤109 |
popcount(a)表示 a 在二进制表示下 1 的个数 |
7 |
a,b |
max(a,b) |
∣a∣,∣b∣≤109 |
14 |
无 |
8 |
n |
f(n) |
1≤n≤42 |
3×3 |
20 |
f(n)={1f(n−1)+f(n−2)n<2n≥2 |
输入格式
本题为提交答案题。
输出格式
第一行为 n 和 m,表示你用了 n 行 m 列。
接下来n×m个部分,第 i 个部分的第一行 ti 表示在第 i 个处理单元中命令的数量(可以为 0),接下来 ti 行每行描述一个命令,见上文所述。
提示
样例#1解释
这个样例实现了 A+B problem。
第一行的 1 1
表示用的处理单元为 1×1。
第二行表示第一个处理单元有 5 条指令。
第三行的命令在第一个周期执行,读入了一个数(假定为 a) ,此时该单元的状态为 key=0,tmp=a。
第四行在第二个周期执行,交换了 key 和 tmp,状态为 key=a,tmp=0。
第五行在第三个周期执行,读入了另一个数 b,状态为 key=a,tmp=b。
第六行在第四个周期执行,给 key 加上 tmp,状态为 key=a+b,tmp=b。
第七行在第五个周期执行,输出该单元的 key,即输出了 a+b。
如果你的程序在 2000 个周期内没有运行完毕,或者有语法错误,或者超过处理单元尺寸限制,得 0 分。
如果你的第 i 个任务的程序能得出正确的结果,并且和标准答案运行所需的周期数量相同或比其更少,得会得到该测试点的满分,否则设你的程序运行了 a 个周期,标准答案运行了 s 个周期,你的分数为 ⌊该测试点分数×(as)×0.8⌋(注意,部分正确显示WA,但是仍然有分数)。
PS:如果你构造了什么好玩的土豆程序(可以和本题目中的任务无关),请到答疑博客下或者私信告诉我,会酌情给予奖励。
Check 下载见附件。
example2.out: