P4639 [SHOI2011] 编译优化

题意

这是一道提交答案题,给出 \(10\) 个输入,要求出每个输入的答案。
有一个奇妙语言,名字叫 SHSH 语言共有 \(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
posted @ 2026-05-21 19:30  Link-Cut_Trees  阅读(42)  评论(0)    收藏  举报