[题解] 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 ...
随机推荐
- js for和while两种99乘法表
<script type="text/javascript"> for(var i=1; i<=9; i++) { for(var j=1; j<=i;j+ ...
- [跨数据库、微服务] FreeSql 分布式事务 TCC/Saga 编排重要性
前言 FreeSql 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/Gbase/神通/人大金仓/翰高/Clickhouse/MsAcc ...
- Linux 基于源码安装 Redis
1.下载 Redis: 前往 Redis 官网复制 Redis 相应版本的下载链接,到终端下载 2. 进入到指定目录, 下载 redis.tar.gz 包,运行 wget + 复制的下载链接 例如: ...
- MySQL查询性能优化七种武器之索引下推
前面已经讲了MySQL的其他查询性能优化方式,没看过可以去了解一下: MySQL查询性能优化七种武器之索引潜水 MySQL查询性能优化七种武器之链路追踪 今天要讲的是MySQL的另一种查询性能优化方式 ...
- [CF1539F] Strange Array (线段树)
题面 有一个长度为 n \tt n n 的序列 a \tt a a ,对于每一个位置 i ∈ [ 1 , n ] \tt i\in[1,n] i∈[1,n]: 选择一个区间 [ l , r ] \tt ...
- 分布式协同AI基准测试项目Ianvs:工业场景提升5倍研发效率
摘要:全场景可扩展的分布式协同AI基准测试项目 Ianvs(雅努斯),能为算法及服务开发者提供全面开发套件支持,以研发.衡量和优化分布式协同AI系统. 本文分享自华为云社区<KubeEdge|分 ...
- 使用VS Code 搭建 platformio 平台
一.需要的资源网站 arduino GitHub:https://github.com/arduino espressif GitHub:https://github.com/espressif pl ...
- 一次较波折的MySQL调优
春节长假某日,阳光明媚,春暖花开,恰逢冬奥会开幕,想着一定是一个黄道吉日,必能顺风顺水.没想到却遇到一个有点小波折 的客户报障. 01故障起因 故障起因是客户前一天从自建MySQL迁移到云上RDS,在 ...
- Android、iOS平台RTMP/RTSP播放器实时音量调节
介绍移动端RTMP.RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对 ...
- flutter系列之:UI layout简介
目录 简介 flutter中layout的分类 常用layout举例 总结 简介 对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了.布局的英文名叫做layout,就是用来 ...