@exut
2024-11-14T02:51:52.000000Z
字数 2484
阅读 152
数学
to be upd...
感觉到退役都学不会概率,哎
写的会比较乱,有空再排序吧
在早期OI问题中,充斥着各种离散型概率问题
但是在近期许多模拟赛中开始发现一些奇奇怪怪的连续型问题,特别难受
设离散型随机变量 的概率分布为
若求和 绝对收敛,则称其值为 的期望,记为
考虑到每条路径等概率出现,所以 即总长除以路径条数
记忆化搜索即可,这是个DAG啊
本题得分是1,所以期望和概率是相等的
利用期望的线性性可以单独求每两个数的情况
此处是一个古典概型,即满足概率等于合法方案数除以总方案
于是
计算即可
好怪,为什么浮点数除整数的误差比浮点数除浮点数大,猜测是算法不一样导致的
此处用了个经典的trick,简单介绍一下:
题意转化一下,转成概率最喜欢的卡牌
假如有 种卡牌,你现在有 种,下一次随机取一种,获得新牌的概率是 ,不获得的概率是
所以这一步得到卡牌数量的期望 是
反过来,获得这张牌的期望操作次数 就是
于是计算即可
这玩意貌似是什么几何概型?
于是本题递推即可
我们不妨把这 个点全部存下来并且按照权值排序,从小到大
于是我们可以设 表示用 当起点的期望得分,那么有
其中 是小于 的位置的个数
复杂度 ,不可过
数组上个前缀和显然是可以的
盯一下
再配一下
于是对 都记一下前缀和即可
实现有点细节,这个放一下码
#include<bits/stdc++.h>#define int long longusing namespace std;const int mod=998244353;int n,m;int r,c;struct node{int x,y;int val;};bool cmp(node x,node y){return x.val<y.val;}node a[1000005];int cnt;int s;int dp[1000005];int inv[1000005];int sx1[1000005],sx2[1000005],sy1[1000005],sy2[1000005];int sdp[1000005];signed main(){cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cnt++;cin>>a[cnt].val;a[cnt].x=i,a[cnt].y=j;}}inv[0]=inv[1]=1;for(int i=2;i<=cnt;i++) inv[i]=inv[mod%i]*(mod-mod/i)%mod;sort(a+1,a+cnt+1,cmp);for(int i=1;i<=cnt;i++){sx1[i]=(sx1[i-1]+a[i].x)%mod;sx2[i]=(sx2[i-1]+a[i].x*a[i].x%mod)%mod;sy1[i]=(sy1[i-1]+a[i].y)%mod;sy2[i]=(sy2[i-1]+a[i].y*a[i].y%mod)%mod;}int l=0;for(int i=1;i<=cnt;i++){if(a[i].val!=a[i-1].val) l=i-1;dp[i]=sdp[l];dp[i]=(dp[i]+l*a[i].x*a[i].x%mod)%mod;dp[i]=(dp[i]+l*a[i].y*a[i].y%mod)%mod;dp[i]=(dp[i]+sx2[l])%mod;dp[i]=(dp[i]+sy2[l])%mod;dp[i]=(dp[i]-2*a[i].x*sx1[l]%mod+mod)%mod;dp[i]=(dp[i]-2*a[i].y*sy1[l]%mod+mod)%mod;dp[i]=(dp[i]*inv[l])%mod;sdp[i]=(sdp[i-1]+dp[i])%mod;}cin>>r>>c;for(int i=1;i<=cnt;i++){if(a[i].x==r and a[i].y==c) s=i;}cout<<dp[s];}
我们设 表示路径 的期望总路径长度,记得期望dp很多时候逆推都比顺着容易且正常
记忆化搜素容易写,转移是典的
emmmm有很多淀粉质的做法,我的评价是没啥必要吧
考虑dp,设 表示在 的子树内到 长度为 的方案数,转移也是显然的,输出更是简单的
用淀粉质有点牛刀了,而且我并不会淀粉质,朴素的dp复杂度更好而且也不难写,何苦呢xd
定义为: 其中 为 取值的密度分布函数,一定满足 (样本空间的总概率为 )
直观由等概率可以看出第一次获得的钱的分布函数 在区间 上都是 ,其余部分是 ,则期望为 ,后续每一步就是把 替换为上一轮的期望,所以有结论