Date:2022.01.15
题意:有
n
+
2
n+2
n+2个塔编号从
[
0
,
n
+
1
]
[0,n+1]
[0,n+1],在每个塔上建一个通讯器的概率都是
1
2
\frac{1}{2}
21,设每个通讯器传送半径为
p
p
p,所在下标为
i
i
i,即能传送讯息给
[
i
−
(
p
−
1
)
,
i
+
(
p
−
1
)
]
[i-(p-1),i+(p-1)]
[i−(p−1),i+(p−1)]中的所有元素。要求:
①不能给下标为
0
0
0和
n
+
1
n+1
n+1的塔传送消息。
②给下标为
[
1
,
n
]
[1,n]
[1,n]的所有塔都能收到消息,且只收到
1
1
1次。
求方案数。
思路:设
f
[
i
]
f[i]
f[i]:不包含塔
0
、
n
+
1
0、n+1
0、n+1,且长度为
i
i
i的方案数。求当前
f
[
i
]
f[i]
f[i]时分别让
1...
⌈
n
2
⌉
1...\lceil\frac{n}{2}\rceil
1...⌈2n⌉处的
p
p
p满足向左取到
1
1
1,只有这样右边才不会取到
n
+
1
n+1
n+1,再依次累加每一类的方案数。
①
f
[
1
]
:
1
f[1]:1
f[1]:1,
i
=
1
,
只
有
这
1
种
方
案
,
贡
献
1
。
i=1,只有这1种方案,贡献1。
i=1,只有这1种方案,贡献1。
②
f
[
2
]
:
f
[
1
]
f[2]:f[1]
f[2]:f[1]。
i
=
1
,
占
[
1
,
1
]
,
其
右
边
相
当
于
f
[
1
]
种
方
案
i=1,占[1,1],其右边相当于f[1]种方案
i=1,占[1,1],其右边相当于f[1]种方案。
③
f
[
3
]
:
f
[
2
]
+
1
f[3]:f[2]+1
f[3]:f[2]+1。
i
=
1
,
占
[
1
,
1
]
,
其
右
边
相
当
于
f
[
2
]
种
方
案
;
i
=
2
,
占
[
1
,
3
]
,
仅
1
种
可
能
i=1,占[1,1],其右边相当于f[2]种方案;i=2,占[1,3],仅1种可能
i=1,占[1,1],其右边相当于f[2]种方案;i=2,占[1,3],仅1种可能。
④
f
[
4
]
:
f
[
3
]
+
f
[
1
]
f[4]:f[3]+f[1]
f[4]:f[3]+f[1]。
i
=
1
,
占
[
1
,
1
]
,
其
右
边
相
当
于
f
[
3
]
种
方
案
;
i
=
2
,
占
[
1
,
3
]
,
其
右
边
相
当
于
f
[
1
]
种
方
案
i=1,占[1,1],其右边相当于f[3]种方案;i=2,占[1,3],其右边相当于f[1]种方案
i=1,占[1,1],其右边相当于f[3]种方案;i=2,占[1,3],其右边相当于f[1]种方案。
⑤
f
[
5
]
:
f
[
4
]
+
f
[
2
]
+
1
f[5]:f[4]+f[2]+1
f[5]:f[4]+f[2]+1。
i
=
1
,
占
[
1
,
1
]
,
其
右
边
相
当
于
f
[
4
]
种
方
案
;
i
=
2
,
占
[
1
,
3
]
,
其
右
边
相
当
于
f
[
2
]
种
方
案
;
i
=
3
,
占
[
1
,
5
]
,
只
有
这
1
种
方
案
。
i=1,占[1,1],其右边相当于f[4]种方案;i=2,占[1,3],其右边相当于f[2]种方案;i=3,占[1,5],只有这1种方案。
i=1,占[1,1],其右边相当于f[4]种方案;i=2,占[1,3],其右边相当于f[2]种方案;i=3,占[1,5],只有这1种方案。
…
因此可归纳得到:
f [ i ] = ∑ k = 0 ⌊ i − 1 2 ⌋ f [ i − 2 ⋅ k − 1 ] f[i]=\sum_{k=0}^{\lfloor\frac{i-1}{2}\rfloor}f[i-2·k-1] f[i]=∑k=0⌊2i−1⌋f[i−2⋅k−1]
将 i i i分奇偶,再次将右边所有项归纳,不难得出:
f [ i ] = f [ i − 1 ] + f [ i − 2 ] f[i]=f[i-1]+f[i-2] f[i]=f[i−1]+f[i−2]
由此便求出所有
f
[
i
]
f[i]
f[i]。
因此答案即为:
f [ n ] ∗ 1 2 n % 998244353 f[n] * \frac{1}{2^n} \% 998244353 f[n]∗2n1%998244353
即一个斐波那契数列,但由于每种方案的概率都是
1
2
n
\frac{1}{2^n}
2n1,因此要除
1
2
n
\frac{1}{2^n}
2n1。除法取模涉及同余,因此要找
2
n
2^n
2n在
m
o
d
998244353
mod 998244353
mod998244353意义下的逆元。又因为
998244353
998244353
998244353为质数,因此
(
2
n
,
998244353
)
=
=
1
(2^n,998244353)==1
(2n,998244353)==1,费马小定理+快速幂求解。
代码如下:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 2e5+10,mod=998244353;
typedef long long LL;
LL a[N],f[N];
LL qmi(LL a,LL k,LL p)
{
LL res=1;
while(k)
{
if(k&1) res=res*a%mod;
a=a*a%mod;
k>>=1;
}
return res;
}
int main()
{
LL n;cin>>n;
f[1]=f[2]=1;
for(int i=3;i<=n;i++)
f[i]=(f[i-1]+f[i-2])%mod;
cout<<f[n]*qmi(qmi(2,n,mod),mod-2,mod)%mod<<' ';
return 0;
}