题意
这是一道提交答案题,给出 \(10\) 个输入,要求出每个输入的答案。
有一个奇妙语言,名字叫 SH。SH 语言共有 \(26\) 个寄存器,用大写拉丁字母 A,B,...,Z 表示。SH 语言的程序中,第一行依次是这 \(26\) 个寄存器的初始值,用空格分隔。程序的第二行起,每一行都是一条命令。SH 语言有三种命令,如下表所示。
ADD命令 格式:ADD R1 R2功能:将寄存器R2的值加到寄存器R1上。 限制:无。GOTO命令 格式:IF R < I1 GOTO LINE I2功能:如果寄存器R的值小于立即数 \(I1\),则跳转至第 \(I2(\ge2)\)行,否则继续执行下一行。限制:至多出现一次,且只可能出现在第 \(I2\) 行之后。PRINT命令 格式:PRINT_R功能:打印寄存器R的值。限制:出现且仅出现在最后一行。
现给定一个 SH 语言的程序,请输出 PRINT 命令打印的值。
思路
test1,2
直接模拟
test 3
发现只有最后一个 ADD G I 是有用的,可以用除法替代
test4
发现循环内部的东西是没用的
test5,6,7
直接模拟
test8
发现 \(P\) 每次加 \(4\),\(X\) 的增量每次加四,第 \(10\) 次变换结束后 \(P\) 的值为 \(45\),\(X\) 的值为 \(238\),增量为 \(41\),那么第 \(i+10\) 次时 \(P\) 的值为 \(45+4i\),\(X\) 的值为 \(238+41i+\frac{(4+4i)i}2\),可以用二分求出变换的次数。
test 9
发现 \(N\) 的增量为 \(3\),可以优化成除法。
test10
发现 \(H\) 增量每次为增加 \(4\),\(L\) 增量为 \(4\),用 \(test8\) 类似的方法。
答案
100
1000000000
1000000000000000925
428911
1371
288452
1000000531162
89442725
1000000000000000000
4000000048
