题目

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

令\(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. Taro框架完美使用Axios

    前言 众所周知,在H5前端开发中,axioshttp库几乎是必选.大部分人都对它的使用非常熟悉.然而在小程序开发中,axios怎么没法用,需要使用对应平台提供的http接口,如微信小程序的wx.req ...

  2. Java-类与对象-多态

    Java类与对象-多态 多态:类与对象三大特征之一 什么是多态? 同类型的对象,执行同一个行为,会表现出不同的行为特征. 多态的形式 1.父类类型 对象名称 = new 子类构造器(); 2.接口 对 ...

  3. 以十字链表为存储结构实现矩阵相加(严5.27)--------西工大noj

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef int ElemT ...

  4. 在阿里云Centos7.6上面部署基于Redis的分布式爬虫Scrapy-Redis

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_83 Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取.但是当我们要爬取的页面非常多的 ...

  5. SpringBoot连接MySQL配置(yml)?

    SpringBoot连接MySQL 需要导入的依赖 <!--这是直接在创建springboot项目时直接勾选生成的--><!--jdbc--><dependency> ...

  6. Windows环境下部署MySQL主从并模拟升级到8.0

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.部署实例 1.下载2个软件 http://ftp.kaist.ac.kr/mysql/Downloads/MySQL- ...

  7. Redis 08 地理位置

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 Redis 的 ...

  8. 前端架构-分层而治,铁打的MV流水的C

    大家好,我是Eluxjs的作者,Eluxjs是一套基于"微模块"和"模型驱动"的跨平台.跨框架『同构方案』,欢迎了解... 文前声明,以下推断和结论纯属个人探索 ...

  9. 微软Azure配置中心 App Configuration (三):配置的动态更新

    写在前面 我在前文: <微软Azure配置中心 App Configuration (一):轻松集成到Asp.Net Core>已经介绍了Asp.net Core怎么轻易的接入azure ...

  10. MySQL索引知识点&面试常见问题

    来源:BiggerBoy 作者:北哥 原文链接:https://mp.weixin.qq.com/s/fucHvdRK5wRrDfBOo6IBGw 大家好我是北哥,今天整理了MySQL索引相关的知识点 ...