[题解] Codeforces 1349 D Slime and Biscuits 概率,推式子,DP,解方程
题目
神题。很多东西都不知道是怎么凑出来的,随意设置几个变量,之间就产生了密切的关系。下次碰到这种题应该还是不会做罢。
令\(E_x\)为最后结束时所有的饼干都在第x个人手中的概率*时间的和。\(ans=\sum E_x\)。
令\(C\)为现在所有的饼干都在第x个人手中,要将它们全部转移到第y(\(x \neq y\))个人手中的期望步数。显然对于所有的x,y,C都是相同的。
令\(P_i\)为游戏结束时,所有饼干都在第i人手中的概率。
假设篡改游戏规则,饼干全在第x个人手中时游戏才结束。令此时的期望步数为\(E'_x\)。
那么就有如下等式:
\]
证明就考虑\(E'_x\)的组成,第一次把所有的饼干都集中到一个人手中时,有一定的可能就是集中到了x手中,这件事的概率*期望步数是\(E_x\);否则就要加上从这个人到x的期望步数乘上概率,是\(P_iC\)。移项并对所有x求和可得:
n \cdot ans=\sum E'_x -C(n-1)
\]
所以求出所有\(E'_x\)和\(C\)就行了。令\(f_i\)表示需要把所有饼干都移动到某个人手中,这个人手中现在有i个饼干的还需要的步数。(反正想想转移就发现是可以这样DP的) 转移为(\(m表示\sum a_i\)):
\(f_m=0\)
\(f_0=1+\frac{n-2}{n-1}f_0+\frac{1}{n-1}f_1\)(每块饼干有n-1种走法,n-2/n-1种走到别的人手里,1/n-1种走到这个人手里)
其他:\(f_i=1+\frac{i}{m}f_{i-1}+\frac{m-i}{m}(\frac{n-2}{n-1}f_i+\frac{1}{n-1}f_{i+1})\)(先讨论动手里的还是外面的饼干)
把最后一个式子化成\(Af_{i-1}+(B-1)f_i+Cf_{i+1}+1=0\)的形式,通过推出这个式子的过程可以发现\(A+B+C=0\)(因为是三种可能性的概率和)。三个未知数不好处理,我们把f差分一下,令\(g_i=f_i-f_{i+1}\)(注意是下标小的-下标大的)。
先试试如果\(g_{i-1}\)的系数是A会怎么样。显然应该让\(f_i\)的系数=B。发现刚好得到了一个合法的式子\(Ag_{i-1}+(A+B-1)g_i+1=0\)(记得A+B+C=0)。
由第一个转移式知道\(g_0=n-1\)所以就可以递推出所有\(g_i\),求个后缀和就是\(f_i\),这题就做完了。时间复杂度\(O(n)\),下面代码里写的\(O(nlogn)\),因为懒。
点击查看代码
#include <bits/stdc++.h>
#define rep(i,n) for(LL i=0;i<n;++i)
#define repn(i,n) for(LL i=1;i<=n;++i)
#define LL long long
#define pii pair <LL,LL>
#define fi first
#define se second
#define mpr make_pair
#define pb push_back
using namespace std;
const LL MOD=998244353;
LL qpow(LL x,LL a)
{
LL res=x,ret=1;
while(a>0)
{
if((a&1)==1) ret=ret*res%MOD;
a>>=1;
res=res*res%MOD;
}
return ret;
}
LL n,a[100010],g[300010],m=0,f[300010];
int main()
{
cin>>n;
rep(i,n) scanf("%lld",&a[i]),m+=a[i];
g[0]=n-1;
repn(i,m-1)
{
LL A=i*qpow(m,MOD-2)%MOD,B=(m-i)*(n-2)%MOD*qpow(m,MOD-2)%MOD*qpow(n-1,MOD-2)%MOD;
g[i]=(MOD+MOD-1-A*g[i-1]%MOD)*qpow((A+B-1+MOD)%MOD,MOD-2)%MOD;
}
f[m]=0;
for(int i=m-1;i>=0;--i) f[i]=(f[i+1]+g[i])%MOD;
LL ans=0;
rep(i,n) (ans+=f[a[i]])%=MOD;
(ans+=MOD-(n-1)*f[0]%MOD)%=MOD;
(ans*=qpow(n,MOD-2))%=MOD;
cout<<ans<<endl;
return 0;
}
[题解] Codeforces 1349 D Slime and Biscuits 概率,推式子,DP,解方程的更多相关文章
- Codeforces 1528F - AmShZ Farm(转化+NTT+推式子+第二类斯特林数)
Codeforces 题目传送门 & 洛谷题目传送门 神仙题,只不过感觉有点强行二合一(?). 首先考虑什么样的数组 \(a\) 符合条件,我们考虑一个贪心的思想,我们从前到后遍历,对于每一个 ...
- Codeforces 923E - Perpetual Subtraction(微积分+生成函数+推式子+二项式反演+NTT)
Codeforces 题目传送门 & 洛谷题目传送门 神仙题 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 首先考虑最朴素的 \(dp\),设 \(dp_{z,i}\) 表示经 ...
- Codeforces 1139D(推式子+dp)
题目传送 推公式博客传送 推完式子就是去朴素地求就行了Orz const int maxn = 1e5 + 5; const int mod = 1e9 + 7; int m, mu[maxn], v ...
- 题解 P5320 - [BJOI2019]勘破神机(推式子+第一类斯特林数)
洛谷题面传送门 神仙题(为什么就没能自己想出来呢/zk/zk) 这是我 AC 的第 \(2\times 10^3\) 道题哦 首先考虑 \(m=2\) 的情况,我们首先可以想到一个非常 trivial ...
- 概率与期望详解!一次精通oi中的概率期望
目录 基础概念 最大值不超过Y的期望 概率为P时期望成功次数 基础问题 拿球 随机游走 经典问题 期望线性性练习题 例题选讲 noip2016换教室 区间交 0-1边树求直径期望 球染色 区间翻转 二 ...
- 【CodeForces】913 F. Strongly Connected Tournament 概率和期望DP
[题目]F. Strongly Connected Tournament [题意]给定n个点(游戏者),每轮游戏进行下列操作: 1.每对游戏者i和j(i<j)进行一场游戏,有p的概率i赢j(反之 ...
- Codeforces 947E Perpetual Subtraction (线性代数、矩阵对角化、DP)
手动博客搬家: 本文发表于20181212 09:37:21, 原地址https://blog.csdn.net/suncongbo/article/details/84962727 呜啊怎么又是数学 ...
- Codeforces Round #221 (Div. 1) B. Maximum Submatrix 2 dp排序
B. Maximum Submatrix 2 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset ...
- Codeforces Round #277 (Div. 2) E. LIS of Sequence DP
E. LIS of Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/486/pr ...
随机推荐
- @Document注解与Lombok的区别
- 思维导图学《On Java》基础卷
说明 原来读过 <Java 编程思想(第 4 版)>,但是这个版本还是基于 Java 5 讲解.由于 Java 8 做出了非常大的改进(是 Java 变化最大的版本),且截止到 2022- ...
- linux系统中Nginx+FFmPeg+vlc实现网页视频播放配置过程
linux系统中Nginx+FFmPeg实现网页监控视频播放配置过程 1.安装好的nginx上添加模块nginx-http-fiv-module-master 此模块是rtmp模块的升级版,有它所有的 ...
- 通过Nginx(OpenResty)修改UserAgent
通过OpenResty修改UserAgent,非常简单,Demo里做了多次反向代理是为了日志输出显示效果.实际应用中不必这么麻烦. 浏览器访问如下地址即可 http://127.0.0.1:10090 ...
- 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...
- Linux 04 用户文件
参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 概述 完成用户管 ...
- Debezium的基本使用(以MySQL为例)
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 一.Debezium介绍 摘自官网: Debeziu ...
- 2020牛客NOIP赛前集训营-提高组(第二场)- B.包含 (FWT)
题面 题解 这题就是个快速沃尔什变换的模板题,输入ai时,令s[ai]=1,对s[]做一遍DWT_AND(s)(快速沃尔什正变换,按位与),然后直接访问s[x]完事. #include<map& ...
- 【HTML】学习路径4-align对齐-标签属性
每个标签都可以设置各种属性,比如可以给一个段落标签添加一个name的属性: <p name="段落标签1"> 这一节我们学习一个属性:align对齐标签 第一章:ali ...
- 「学习笔记」字符串基础:Hash,KMP与Trie
「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录 「学习笔记」字符串基础:Hash,KMP与Trie Hash 算法 代码 KMP 算法 前置知识:\(\text{Border} ...