题目

神题。很多东西都不知道是怎么凑出来的,随意设置几个变量,之间就产生了密切的关系。下次碰到这种题应该还是不会做罢。

令\(E_x\)为最后结束时所有的饼干都在第x个人手中的概率*时间的和。\(ans=\sum E_x\)。

令\(C\)为现在所有的饼干都在第x个人手中,要将它们全部转移到第y(\(x \neq y\))个人手中的期望步数。显然对于所有的x,y,C都是相同的。

令\(P_i\)为游戏结束时,所有饼干都在第i人手中的概率。

假设篡改游戏规则,饼干全在第x个人手中时游戏才结束。令此时的期望步数为\(E'_x\)。

那么就有如下等式:

\[E'_x=E_x+\sum_{i \neq x} E_i+P_iC
\]

证明就考虑\(E'_x\)的组成,第一次把所有的饼干都集中到一个人手中时,有一定的可能就是集中到了x手中,这件事的概率*期望步数是\(E_x\);否则就要加上从这个人到x的期望步数乘上概率,是\(P_iC\)。移项并对所有x求和可得:

\[n\sum E_x=\sum E'_x -C(n-1)\sum P_i\\
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,解方程的更多相关文章

  1. Codeforces 1528F - AmShZ Farm(转化+NTT+推式子+第二类斯特林数)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题,只不过感觉有点强行二合一(?). 首先考虑什么样的数组 \(a\) 符合条件,我们考虑一个贪心的思想,我们从前到后遍历,对于每一个 ...

  2. Codeforces 923E - Perpetual Subtraction(微积分+生成函数+推式子+二项式反演+NTT)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 首先考虑最朴素的 \(dp\),设 \(dp_{z,i}\) 表示经 ...

  3. Codeforces 1139D(推式子+dp)

    题目传送 推公式博客传送 推完式子就是去朴素地求就行了Orz const int maxn = 1e5 + 5; const int mod = 1e9 + 7; int m, mu[maxn], v ...

  4. 题解 P5320 - [BJOI2019]勘破神机(推式子+第一类斯特林数)

    洛谷题面传送门 神仙题(为什么就没能自己想出来呢/zk/zk) 这是我 AC 的第 \(2\times 10^3\) 道题哦 首先考虑 \(m=2\) 的情况,我们首先可以想到一个非常 trivial ...

  5. 概率与期望详解!一次精通oi中的概率期望

    目录 基础概念 最大值不超过Y的期望 概率为P时期望成功次数 基础问题 拿球 随机游走 经典问题 期望线性性练习题 例题选讲 noip2016换教室 区间交 0-1边树求直径期望 球染色 区间翻转 二 ...

  6. 【CodeForces】913 F. Strongly Connected Tournament 概率和期望DP

    [题目]F. Strongly Connected Tournament [题意]给定n个点(游戏者),每轮游戏进行下列操作: 1.每对游戏者i和j(i<j)进行一场游戏,有p的概率i赢j(反之 ...

  7. Codeforces 947E Perpetual Subtraction (线性代数、矩阵对角化、DP)

    手动博客搬家: 本文发表于20181212 09:37:21, 原地址https://blog.csdn.net/suncongbo/article/details/84962727 呜啊怎么又是数学 ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. rust里的内存对齐

    内存对齐主要遵循下面三个原则: 结构体变量的起始地址能够被其最宽的成员大小整除 结构体每个成员相对于起始地址的偏移能够被其自身大小整除,如果不能则在前一个成员后面补充字节 结构体总体大小能够被最宽的成 ...

  2. RSA算法概述

    RSA算法的概述(个人理解,欢迎纠正) RSA是一种基于公钥密码体制的优秀加密算法,1978年由美国(MIT)的李维斯特(Rivest).沙米尔(Shamir).艾德曼(Adleman)提的.RSA算 ...

  3. FileFilter过滤器的原理和使用和FileNameFilter过滤器的使用

    FileFilter过滤器的原理和使用 package com.yang.Test.FileStudy; import java.io.File; /** * 在File类中有两个和ListFiles ...

  4. 最佳实践 | 联通数科基于 DolphinScheduler 的二次开发

    点击上方 蓝字关注我们 ✎ 编 者 按 数据时代下,井喷的数据量为电信行业带来新的挑战.面对每日数百 TB 的新增数据,稳定可靠的调度系统必不可少. 中国联通旗下的联通数字科技有限公司(以下简称&qu ...

  5. 开发Chrome插件,实现网站自动登录

    近期被一个事情困扰着,我们采购了一款软件,里面有一个数据大屏页,当登录过期后,数据就会保持原状,不再更新.和供应商反馈了很多次,都无法彻底解决数据显示的问题,没办法,自己周末在家研究,网站自动登录的事 ...

  6. 深入解析Flutter下一代渲染引擎Impeller

    作者 魏国梁:字节 Flutter Infra 工程师, Flutter Member,长期专注 Flutter 引擎技术 袁    欣:字节 Flutter Infra 工程师, 长期关注渲染技术发 ...

  7. C#基础_类的声明

    新建Clerk类. using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...

  8. java.lang.UnsatisfiedLinkError报错

    是因为使用maven时,运行web项目时,在maven的依赖包没有打包到tomcat中(out目录中),所以要手动加上

  9. [开源精品] C#.NET im 聊天通讯架构设计 -- FreeIM 支持集群、职责分明、高性能

    FreeIM 是什么? FreeIM 使用 websocket 协议实现简易.高性能(单机支持5万+连接).集群即时通讯组件,支持点对点通讯.群聊通讯.上线下线事件消息等众多实用性功能. ImCore ...

  10. 简单创建一个SpringCloud2021.0.3项目(二)

    目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 上一篇教程 3. 创建公共模块Common 4. 网关Gateway 1. 创建Security 2. Security登陆配置 3 ...