\(\mathcal{Description}\)

  Link.

  有 \(n\) 个开关,初始时所有开关的状态为 \(0\)。给定开关的目标状态 \(s_1,s_2,\cdots,s_n\)。每次操作中会以正比于 \(p_i\) 的概率拨动开关 \(i\)。求开关达到目标状态的期望操作次数,对 \(998244353\) 取模。

  \(n\le100\),\(\sum p\le5\times10^4\)。

\(\mathcal{Solution}\)

  不妨令 \(p_i\) 为一次操作拨动 \(i\) 的概率。设 \(F(x)\) 为“\(i\) 次操作后开关是目标状态的概率”的 EGF,\(G(x)\) 为“\(i\) 次操作后回到全零状态的概率”的 EGF。考虑每个开关是否需要被拨动,得到

\[F(x)=\prod_{i=1}^n\frac{e^{p_ix}+(-1)^{s_i}e^{-p_ix}}{2}
\]

代入 \(s_i=0~(i=1,2,\dots,n)\) 即得

\[G(x)=\prod_{i=1}^n\frac{e^{p_ix}+e^{-p_ix}}{2}
\]

  设 \(H(x)\) 为“\(i\) 次操作第一次使开关达到目标状态的概率”的 EGF。\(F\) 和 \(H\) 的区别在于是否接受“多次回到目标状态”,而“回到目标状态”正对应着 \(G\) 的意义,它们可以建立等量关系

\[F=H\cdot G\\
\Rightarrow~~~~H=F\cdot G^{-1}
\]

故欲求期望 \(H'(1)\),仅需求 \((F\cdot G^{-1})'(1)\)。

  设 \(u_{1-i}=2^n[e^{ix}]F(x)\),\(v_{1-i}=2^n[e^{ix}]G(x)\),则有

\[\begin{aligned}
u_{1-i}&=2^n[e^{ix}]F(x)\\
&=[x^{i}]\prod_{j=1}^n(x^{p_j}+(-1)^{s_j}x^{-p_j})\\
&=[x^{i-1}]\prod_{j=1}^n(1+(-1)^{s_j}x^{-2p_j})\\
&=[x^{1-i}]\prod_{j=1}^n(1+(-1)^{s_j}x^{2p_j})
\end{aligned}
\]

同理地,对于 \(v_i\):

\[\begin{aligned}
v_{1-i}&=2^n[e^{ix}]G(x)\\
&=\cdots\\
&=[x^{1-i}]\prod_{j=1}^n(1+x^{2p_j})
\end{aligned}
\]

在此基础上考虑所求答案:

\[H(x)=\frac{\sum_{i}2^{-n}u_{1-i}e^{ix}}{\sum_i2^{-n}v_{1-i}e^{ix}}
\]

注意 \(e^{ix}=\operatorname{EGF}\lang 1,i,i^2,\cdots\rang\),将其统一转为 \(\operatorname{OGF}\lang 1,i,i^2,\cdots\rang=\frac{1}{1-ix}\),此时 \(H\) 的含义变为概率的 OGF。可以得到

\[\begin{aligned}
H(x)&=\frac{\sum_i\frac{u_{1-i}}{1-ix}}{\sum_i\frac{v_{1-i}}{1-ix}}\\
&=\frac{(1-x)\sum_i\frac{u_{1-i}}{1-ix}}{(1-x)\sum_i\frac{v_{1-i}}{1-ix}}\\
&=\frac{u_0+\sum_{i\not=1}u_{1-i}\frac{1-x}{1-ix}}{v_0+\sum_{i\not=1}v_{1-i}\frac{1-x}{1-ix}}
\end{aligned}
\]

记 \(s(x)=u_0+\sum_{i\not=1}u_{1-i}\frac{1-x}{1-ix}\),\(t(x)=v_0+\sum_{i\not=1}v_{1-i}\frac{1-x}{1-ix}\)。由于有 \(\left(\frac{1-x}{1-ix}\right)'(1)=\frac{1}{1-i}\),可知

\[s'(1)=\sum_{i\not=1}\frac{u_{1-i}}{1-i}\\
t'(1)=\sum_{i\not=1}\frac{v_{1-i}}{1-i}
\]

而显然又有 \(s(1)=t(1)=u_0=v_0=1\),则对于 \(H'(1)\):

\[\begin{aligned}
H'(1)&=\frac{s'(1)t(1)-s(1)t'(1)}{t^2(1)}\\
&=s'(1)-t'(1)\\
&=\sum_{i\not=1}\frac{u_{1-i}-v_{1-i}}{i-1}\\
&=\sum_{i>0}\frac{v_i-u_i}{i}
\end{aligned}
\]

  故仅需求出 \(u_i\) 和 \(v_i\),有意义的 \(i\) 仅有 \(\mathcal O(\sum p)\)(其中 \(p\) 即输入)个,背包一下,即可 \(\mathcal O(nm)\) 求解。

\(\mathcal{Code}\)

/* Clearink */

#include <cstdio>

#define rep( i, l, r ) for ( int i = l, rpbound##i = r; i <= rpbound##i; ++i )
#define per( i, r, l ) for ( int i = r, rpbound##i = l; i >= rpbound##i; --i ) const int MAXN = 100, MAXS = 5e4, MOD = 998244353;
int n, s[MAXN + 5], p[MAXN + 5], u[MAXS + 5], v[MAXS + 5]; inline int mul( const long long a, const int b ) { return a * b % MOD; }
inline int sub( int a, const int b ) { return ( a -= b ) < 0 ? a + MOD : a; }
inline int add( int a, const int b ) { return ( a += b ) < MOD ? a : a - MOD; }
inline int mpow( int a, int b ) {
int ret = 1;
for ( ; b; a = mul( a, a ), b >>= 1 ) ret = mul( ret, b & 1 ? a : 1 );
return ret;
} int main() {
scanf( "%d", &n );
rep ( i, 1, n ) scanf( "%d", &s[i] );
int sp = 0;
rep ( i, 1, n ) scanf( "%d", &p[i] ), sp += p[i];
u[0] = v[0] = 1;
rep ( i, 1, n ) per ( j, sp, p[i] ) {
u[j] = ( s[i] ? sub : add )( u[j], u[j - p[i]] );
v[j] = add( v[j], v[j - p[i]] );
}
// rep ( i, 0, sp ) printf( "%d%c", u[i], i ^ sp ? ' ' : '\n' );
// rep ( i, 0, sp ) printf( "%d%c", v[i], i ^ sp ? ' ' : '\n' );
int ans = 0;
rep ( i, 1, sp ) {
ans = add( ans, mul( mpow( i << 1, MOD - 2 ), sub( v[i], u[i] ) ) );
}
printf( "%d\n", mul( ans, sp ) );
return 0;
}

Solution -「ZJOI 2019」「洛谷 P5326」开关的更多相关文章

  1. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

  2. Solution -「JSOI 2019」「洛谷 P5334」节日庆典

    \(\mathscr{Description}\)   Link.   给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的).   \(|S|\le3\time ...

  3. Solution -「洛谷 P4372」Out of Sorts P

    \(\mathcal{Description}\)   OurOJ & 洛谷 P4372(几乎一致)   设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...

  4. Solution -「POI 2010」「洛谷 P3511」MOS-Bridges

    \(\mathcal{Description}\)   Link.(洛谷上这翻译真的一言难尽呐.   给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...

  5. Solution -「APIO 2016」「洛谷 P3643」划艇

    \(\mathcal{Description}\)   Link & 双倍经验.   给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...

  6. 「洛谷5290」「LOJ3052」「十二省联考 2019」春节十二响【启发式合并】

    题目链接 [洛谷传送门] [LOJ传送门] 题目大意 给定一棵树,每次选取树上的一个点集,要求点集中的每个点不能是另一个点的祖先,选出点集的代价为点集中权值最大点的权值,问将所有点都选一遍的最小代价为 ...

  7. 「洛谷5283」「LOJ3048」「十二省联考2019」异或粽子【可持久化01trie+优先队列】

    题目链接 [洛谷传送门] [LOJ传送门] 题目大意 让你求区间异或和前\(k\)大的异或和的和. 正解 这道题目是Blue sky大佬教我做的(祝贺bluesky大佬进HA省A队) 我们做过某一些题 ...

  8. 「洛谷4197」「BZOJ3545」peak【线段树合并】

    题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...

  9. 「洛谷3338」「ZJOI2014」力【FFT】

    题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...

随机推荐

  1. [Beyond Compare] 排除/忽略 .svn 文件夹

    [Beyond Compare] Exclude .svn folders Beyond Compare 3 Session >> Session Settings... >> ...

  2. 简单的sdn防火墙

    github仓库 演示视频 本次实验建立的拓扑 使用到的 pox 指令介绍,参考pox控制器学习笔记 1. forwarding.l2_learning 使OpenFlow交换机充当L2学习交换机的一 ...

  3. vue js 格式化时间

    常用于iview日期组件时间处理 /** * @param {Number} num 数值 * @returns {String} 处理后的字符串 * @description 如果传入的数值小于10 ...

  4. winform GDI+ 抗锯齿

    graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

  5. Cesium1.70-介绍CesiumOSM建筑新特性

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 我们很高兴宣布Cesium OSM建筑,一个覆盖整个世界的3D建 ...

  6. LaTex用法笔记(一)——LaTex源文件的基本结构

    首先打开TeXstudio,创建一个新文件并保存 用\documentclass{article}引入一个文档类,也可以引用book/report/letter 然后用\begin{}和\end{}输 ...

  7. 使用Termux并与ubuntu建立ssh连接

    什么是Termux? Termux是一个Android终端仿真器和Linux环境应用程序,直接工作,无需根目录或设置.一个最小的基本系统被自动安装-额外的软件包可以使用APT软件包管理器来使用.不需要 ...

  8. 在海外上传文件到中国AWS S3

    s3cmd --access_key= --secret_key=xxxx --region=cn-north-1 --host=s3.cn-north-1.amazonaws.com.cn --ho ...

  9. python31day

    内容回顾 网编总结,思维导图 计划 并发编程的开始,计划6天 操作系统1天 进程2天 线程2天 携程1天 今日内容 操作系统 多道操作系统: 从顺序的一个个执行的思路变成:并行轮流使用cpu 一个程序 ...

  10. 1.Flink实时项目前期准备

    1.日志生成项目 日志生成机器:hadoop101 jar包:mock-log-0.0.1-SNAPSHOT.jar gmall_mock ​ |----mock_common ​ |----mock ...