可能更好的阅读体验

题目传送门

题目大意

在数轴上有 \(n+2\) 个小镇,位置为 \(0,1,\dots,n,n+1\)
现在在 \(1,2,\dots ,n\) 的小镇都有 \(\dfrac{1}{2}\) 的概率建设一个信号发射器。
对于任意一个信号发射器,你都可以选择一个整数作为强度 \(p\)。如果一个信号发射器的位置是 \(x\),那么位于 \([x-p,x+p]\) 的小镇都能收到一个信号。
现在求能够通过设置信号值,使 \(1,2,\dots,n\) 恰好能接受到一个信号,\(0,n+1\) 不能接受到信号的概率,对 \(998244353\) 取模。

题解

\(f_i\)\(n=i\) 的时候的方案数。显然 \(f_0=f_1=1\)
考虑如何转移
假设我们最后一个位置是 \(i-j\)
那么显然这个位置的强度是 \(j\),这样 \([i-j\times2,i]\) 这段区间就被覆盖了,此时的方案数就是 \(f_{i-j\times 2}\)
枚举 \(j\),我们可以知道

\[f_i=\sum_{j< i\ , i\not\equiv j\pmod 2}f_j \]

所以只需要预处理 \(i\)\(2\) 不同的前缀和就可以了。

int n; ll f[maxn],s[2];
ll fastpow(ll x,ll y){
	ll tmp=x,res=1;
	while(y){
		if(y&1) res=res*tmp%MOD;
		tmp=tmp*tmp%MOD; y>>=1;
	} return res;
}
int main(){
	int i; n=read(); f[0]=1; s[0]=1; f[1]=1; s[1]=1;
	for(i=2;i<=n;i++) f[i]=s[(i&1)^1],f[i]%=MOD,s[i&1]+=f[i],s[i&1]%=MOD;
	print(f[n]*fastpow(499122177,n)%MOD);
	return 0;
}

原文地址:http://www.cnblogs.com/jiangtaizhe001/p/16920768.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性