金色传说
题面
龙老师获得了一个不寻常的计算器,因为这个道具的品质是金色传说。它除了在按 $666$ 时可以发出声音以外,还可以输入一个算式并计算出它的结果。金色传说计算器的显示屏上只有 $n$ 个可以显示的位置,而且只有 $0\cdots 9$ 十个数字键和两个运算符键+、-共 $12$ 个按键可以按,连\=都没有,所以必须输入一个 $n$ 位的合法算式,它才会自动计算出该算式的结果。
我们定义合法的算式为一个长度恰好为 $n$ 的字符串,其中字符串只包含数字 $0\cdots 9$ 和运算符+、-,同时不允许算式第一个或最后一个位置出现运算符,也不允许同时有两个运算符相邻。算式的计算结果是对该字符串模拟十进制加减法运算得到的结果,只包含数字的算式其计算结果等于它本身。如果金色传说计算器的输入不是一个合法的算式,那么它就不能得到任何计算结果。例如,在 $n=6$ 时,1+2+3、+12345、23+45+和123+-4都不是合法的算式,而123456和0+0+00都是合法的算式。注意,前导零是允许在算式中出现的。
龙老师一个个地数出了计算器的显示位置数 $n$。他想知道,如果把所有的合法的算式全都都输入一次,金色传说计算器输出的所有计算结果之和是多少?计算结果的总和可能很大,请输出它对 $998244353$ 取模之后的答案。
思路
先考虑怎么做,在考虑怎么算。
对于任意一个带有符号的算式,例如化简后为 $A+B$,则必然有一个算式化简后为 $A-B$(取反所有符号)。
由于要求和,所以两个式子相加得:
$$ A+B+(A-B)=2\times A $$
完美解决符号问题。
那么如何统计答案呢?
显然,对于一个长度为 $n$ 的算式,且化简操作后的 $A$ 为 $i$ 位,像是下面这个 $n=14,i=6$ 的例子:
$$\text{\color{red}114514}+1919810$$
同样符合条件的还有:
$$\text{\color{red}114514}+1+14514$$$$\text{\color{red}114514}-1+14514$$
显然,最终答案只和红色部分的值有关,所以我们只需要统计所有红色部分的和与在红色部分之后第一个符号后的方案数就好了。
好,设 $sum_i =\sum_{j=1}^{10^{i}-1}$。
根据等差数列有:$$sum_i = \frac{10^{i}\times (10^i-1)}{2}$$
显然的是,由于可以有前导零,所以长度为 $i$ 的红色部分的和恰好就是 $2\times sum_i$。
设 $dp_i$ 表示长度为 $i$ 的合法算式的总数。
有转移方程: $dp_i=10\times dp_{i-1}+20\times dp_{i-2}$。
为什么是这样呢?
由于合法算式末尾不能有符号,所以在长度为 $i-1$ 的串上只能在末尾加 $0\cdots9$ 共 $10$ 种情况。
在长度为 $i-2$ 的串上,显然最后一位只能是数字,倒数第二位是符号,如果倒数第二位是数字,就重复统计了,所以一共 $2\times 10=20$ 种情况。
这些数据不会受到输入数据影响,所以可以预处理,但需要打 $i\le 2$ 的表,因为 $i\le 2$ 无法加入一个符号。
答案如何统计?
对于长度为 $n$ 的算式,一共有前文红色部分长度 $i = 1\cdots n-2$ 的情况,结合前文所述,有式子:
$$ans=\sum_{i=1}^{n-2} (2\times sum_i\times dp_{n-i+1})+sum_{n}$$
或者脑抽写成这样也行(我代码里这样写的):
$$ans=\sum_{i=2}^{n-1} (2\times sum_{i-1}\times dp_{n-i})+sum_{n}$$
好,上代码截图!(交在 NY2025 的号上粘贴不下来呜呜呜~)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现