seuOJ9169 - 猪分身
- 题目类型:传统
- 输入文件:标准输入流
- 输出文件:标准输出流
- 时间限制:1000 ms
- 空间限制:256 MiB
- 题目标签:Div.2, 2025 帆软杯
题目描述
猪学会了分身术,他正在数轴上练习这一术法。
初始时(第 0 秒),猪(相当于 1 个猪分身)位于原点(x=0)处。
1 个第 t 秒位于 x=i 处的猪分身会在第 t 秒结束后、第 t+1 秒开始前消失,同时产生 6 个猪分身,其中:
- 有 1 个猪分身会诞生在 x=i+1 处。
- 有 2 个猪分身会诞生在 x=i+2 处。
- 有 3 个猪分身会诞生在 x=i+3 处。
猪想知道,经过 n 秒后,有多少个猪分身曾在 x=n−1 处停留过。
形式化地,设第 t 秒位于 x=n−1 处的猪分身有 ft 个,求 t=0∑nft。
答案对 998244353 取模。
我们在题目的最后给出了一定的提示。
输入格式
一行一个整数 n(2≤n≤1018)。
输出格式
一行一个整数,表示答案对 998244353 取模后的结果。
样例
样例 1
输入
输出
解释
下面用 [g0,g1,g2,g3,⋯] 来表示 x=i 处有 gi 个猪分身(i=0,1,2,3,⋯):
- 第 0 秒,情况是 [1,0,0,0,⋯]。
- 第 1 秒,情况是 [0,1,2,3,⋯]。
- 第 2 秒,情况是 [0,0,1,4,⋯]。
- 第 3 秒,情况是 [0,0,0,1,⋯]。
- 第 4 秒,情况是 [0,0,0,0,⋯]。
所以,答案是 0+3+4+1+0=8。
样例 2
输入
输出
样例 3
输入
输出
数据范围与提示
模意义下的加减乘法
设 p 是正整数,容易证明:
(a+b)modp(a−b)modp(a×b)modp=((amodp)+(bmodp))modp=((amodp)−(bmodp)+p)modp=((amodp)×(bmodp))modp
快速幂
设 b 是正整数,现欲求 ab。
若 b 很大,则做 O(b) 次乘法是不可接受的。
设 b 的二进制表示为 ctct−1⋯c0,其中 t=⌊log2b⌋,ci=⌊2ib⌋mod2。
由 a2i+1=a2i×a2i,先求出 a20,a21,⋯,a2t,则
ab=i∈{j∣cj=1}∏a2i
这样,就只需要做 O(logb) 次乘法。