[蓝桥杯 2022 省 A] 爬树的甲壳虫
概率dp,关键是要走出思维定势:
一般来讲,都会把dp[i]定义为从0爬到高度i的概率,但是因为任何时刻都有掉下去的可能,这样子不好推(也有大佬这样做出来的)
我们把dp[i]定义为从i爬到n的概率,公式就好推了
而且,我们可以根据定义很自然地得到:
dp[n]=0
#include <bits/stdc++.h> using namespace std; typedef long long LL; inline int read() { int x = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); } return x * f; } const LL P = 998244353; int n; LL quick_pow(LL a, LL k) { LL res = 1; while(k) { if(k&1) res = res*a%P; a = a * a % P; k>>=1; } return res; } int main() { n = read(); LL k1 = 1, k2 = 0, k3 = 0; for(int i = 1; i <= n; i++) { int a = read(), b = read(); LL p_fall = 1ll*a*quick_pow(1ll*b, P-2) % P; LL p_up = 1ll*(b-a)*quick_pow(1ll*b, P-2) % P; k3 = (k3 + k1) % P; k2 = (k2 + p_fall * k1 % P) % P; k1 = (k1 * p_up) % P; } LL t = quick_pow(1ll-k2, P-2); t=(t%P+P)%P; printf("%lld",k3*t%P); return 0; }
一开始过不了样例,对着main函数看了半天,最后才发现问题在快速幂里😂
一开始把
if(k&1) res = res*a%P; a = a * a % P;
这两句的顺序写反了,先倍增a,然后才更新res,导致快速幂的结果错误
本文作者:Gold_stein
本文链接:https://www.cnblogs.com/smartljy/p/18130923
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 刚刚!百度搜索“换脑”引爆AI圈,正式接入DeepSeek R1满血版