题目

\(n\)个开关,一开始处于关闭状态,你需要将他们按成\(s\)状态,按成了之后就停止操作;

每次按下开关的i概率为\(\frac{p_i}{\sum_{i=1}^{n}p_i}\) ,问期望步数;

\(1 \le n \le 100 \ , \ \sum_{i=1}^{n}p_i \le 5 \times 10^4 \ , \ p_i \ge 1\)

题解

  • Part 1

  • 设\(F(x)\)表示不停按\(n\)次最后到达 $ s $ 状态的 $ EGF $ , $ G(x) $ 表示按了 $ n $ 次之后又回到原状态的 $ EGF $ , $ H(x) $ 表示答案的 $ EGF $ ,$ f(x),g(x),h(x) $ 是其分别对应的\(OGF\)

    设 \(P=\sum_{i=1}^{n}p_i\), 考虑\(e^x\)和\(e^{-x}\)的展开构造得:

    \[\begin{cases}
    F(x) = \prod_{i=1}^{n} \frac{e^{\frac{p_i}{P}x} + (-1)^{s_i} e^{-\frac{p_i}{P} x }}{2} \\
    G(x) = \prod_{i=1}^{n} \frac{e^{\frac{p_i}{P}x} + e^{-\frac{p_i}{P}x} }{2} \\
    f = g * h \leftrightarrow h = \frac{f}{g}
    \end{cases}
    \\根据导数的定义,ans = h'(1) = \frac{f'(1)g(1)-f(1)g'(1)}{g^2(1)}
    \]

  • Part 2

  • 考虑求f(1)

  • \(F(x)\)和\(G(x)\)有共同的形式\(F(x) = \sum_{i=-P}^{P}a_i e^{\frac{i}{P}x}\)

  • 同理设\(G(x)\)对应系数为\(b_i\) ,下面只讨论F

  • 首先\(a_i\)和\(b_i\)都可以通过简单的背包求得,然后:

  • $f(x) = OGF(F(x)) = \sum_{i=P}{-P}a_i\sum_{j=0}{\infty} \frac{ijxj}{P^j} = \sum_{i=-P}^{P} \frac{a_i}{1-\frac{i}{P}x } $

  • 由于f(x)和g(x)在x=0处不收敛,所以同时乘以一个\(\Pi_{i=1}^{n}(1-\frac{i}{P}x)\)

    \[f(x) = \sum_{i=-P}^{P}a_i \prod_{j \neq i} (1-\frac{j}{P}x) \to f(1) = a_P \prod_{i \neq P} (1-\frac{i}{P}x)
    \]

  • Part 3

  • 考虑求\(f'(1)\)

  • 首先观察

    \[(\prod_i(1+a_ix))' \ = \sum_{i} a_i \prod_{j \neq i} (1+a_jx)
    \]

  • \(f'(1)\)分两步求:

    \[\begin{cases}
    \sum_{i\neq P} a_i \sum_{j \neq i}(-\frac{j}{P})\prod_{k \neq i,j} (1-\frac{k}{P}x)
    \\= -\sum_{i \neq P} a_i \prod_{j \neq P,i}(1-\frac{j}{P}) &i \neq P \\
    -a_P \sum_{i \neq P} \frac{i}{P} \prod_{j \neq P,i} (1-\frac{j}{P}x) \\
    =-a_P \sum_{i \neq P} \frac{i}{P} \prod_{j \neq P,i} (1-\frac{j}{P}) &i=P \\
    \end{cases}
    \\即f'(1)= -\prod_{i \neq P}(1-\frac{i}{P}x) (\sum_{j \neq P} \frac{a_j}{1-\frac{j}{P}x}+ \frac{a_P}{P} \sum_{j\neq P} \frac{j}{1-\frac{j}{P}x} ) \\
    \]

  • 带入求解(注意到\(a_p=b_p=\frac{1}{2^n}\),该约的约掉)得:

    \[h'(1) = 2^n \sum_{i \neq P} \frac{b_i-a_i}{1-\frac{i}{P}x}
    \]

  • 背包求解即可,时间复杂度:\(O(nP)\)

    #include<bits/stdc++.h>
    #define ll long long
    #define mod 998244353
    using namespace std;
    const int N=100010,ny2=(mod+1)>>1;
    int n,s[N],p[N],f[N],g[N],tmp[N],P;
    void inc(int&x,int y){x+=y;if(x>=mod)x-=mod;}
    void upd(int*A,int x,int fg){
    for(int i=-P;i<=P;++i)tmp[i+P]=A[i+P],A[i+P]=0;
    int y1=ny2,y2=(mod+fg*ny2)%mod;
    for(int i=-P;i<=P;++i){
    if(i+x<=P)inc(A[i+x+P],(ll)tmp[i+P]*y1%mod);
    if(i-x>=-P)inc(A[i-x+P],(ll)tmp[i+P]*y2%mod);
    }
    }
    int pw(int x,int y){
    int re=1;
    while(y){
    if(y&1)re=(ll)re*x%mod;
    y>>=1;x=(ll)x*x%mod;
    }
    return re;
    }
    char gc(){
    static char*p1,*p2,ch[1000000];
    if(p1==p2)p2=(p1=ch)+fread(ch,1,1000000,stdin);
    return(p1==p2)?EOF:*p1++;
    }
    int rd(){
    int x=0;char c=gc();
    while(c<'0'||c>'9')c=gc();
    while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+c-'0',c=gc();
    return x;
    }
    int main(){
    // freopen("switch.in","r",stdin);
    freopen("switch.out","w",stdout);
    n=rd();
    for(int i=1;i<=n;++i)s[i]=rd()?-1:1;
    for(int i=1;i<=n;++i)p[i]=rd(),P+=p[i];
    f[P]=g[P]=1;
    for(int i=1;i<=n;++i){
    upd(f,p[i],s[i]);
    upd(g,p[i],1);
    }
    int ans=0;
    for(int i=0;i<P<<1;++i)inc(ans,(ll)(mod-f[i]+g[i])*pw(2*P-i,mod-2)%mod);
    ans=(ll)ans*P%mod*pw(2,n)%mod;
    cout<<ans<<endl;
    return 0;
    }

【loj3045】【ZJOI2019】开关的更多相关文章

  1. [ZJOI2019] 开关 (一种扩展性较高的做法)

    [ZJOI2019] 开关 (一种扩展性较高的做法) 题意: 有n个开关,一开始状态都为关闭.每次随机选出一个开关将其状态改变,选出第i个开关的概率为${ p_i \over \sum_{i=1}^n ...

  2. [ZJOI2019]开关

    以下的方案数默认是带权方案数.设\(P=\sum_{i=1}^np_i\). 设\(F(x)\)为按\(i\)次开关后到达终止态的方案数的EGF,\(f\)为\(F\)的OGF,显然\(F(x)=\p ...

  3. [ZJOI2019]开关(生成函数+背包DP)

    注:以下p[i]均表示概率 设F(x)为按i次开关后到达终止状态方案数的EGF,显然F(x)=π(ep[i]x/p+(-1)s[i]e-p[i]x/p)/2,然而方案包含一些多次到达合法方案的状态,需 ...

  4. Loj #3045. 「ZJOI2019」开关

    Loj #3045. 「ZJOI2019」开关 题目描述 九条可怜是一个贪玩的女孩子. 这天,她和她的好朋友法海哥哥去玩密室逃脱.在他们面前的是 \(n\) 个开关,开始每个开关都是关闭的状态.要通过 ...

  5. 「ZJOI2019」开关

    传送门 Description 有一些一开始全都是关的开关,每次随机选择一个(每个开关概率不同)开关并改变它的状态,问达到目标状态的期望步数 Solution  \(P=\sum_{i=1}^{n}p ...

  6. UOJ#469. 【ZJOI2019】开关 生成函数

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ469.html 前言 clytql当场秒掉此题可惜不知道为什么fst了. 题解 考虑构建指数生成函数. 对于第 \(i\) ...

  7. LOJ 3045: 洛谷 P5326: 「ZJOI2019」开关

    题目传送门:LOJ #3045. 题意简述 略. 题解 从高斯消元出发好像需要一些集合幂级数的知识,就不从这个角度思考了. 令 \(\displaystyle \dot p = \sum_{i = 1 ...

  8. ZJOI2019一轮游记

    Preface 期待已久的省选终于开始了233,关于之前的一些内容,在ZJOI2019一轮停课刷题记录都可以找到,这里不再赘述 ZJOI2019,Bless All Day -1 今天难得有休息,昨晚 ...

  9. 手游聚合SDK开发之远程开关---渠道登入白名单

    白名单有啥好说的呢?无非就是筛选登入,大家第一眼看到就是这个印象,白名单也是有文章的,弄的时机不同会给你带来很不错的收益,注意是收益.还是举例来说,游戏上线前渠道都会做一个预下载,一般提前1-2天,这 ...

随机推荐

  1. HTML5+规范:Geolocation(管理设备位置信息) 定位

    Geolocation模块管理设备位置信息,用于获取地理位置信息,如经度.纬度等.通过plus.geolocation可获取设备位置管理对象.虽然W3C已经提供标准API获取位置信息,但在某些平台存在 ...

  2. VMware学习笔记之在虚拟机中使用Ghost系统盘安装xp黑屏卡在光标闪无法进入系统

    使用ghost安装后,无法进入系统,卡在光标闪动,请参考如下: https://www.cnblogs.com/mq0036/p/3588058.html https://wenku.baidu.co ...

  3. 阿里巴巴 Java 开发手册 (十)MySQL 数据库

    (一) 建表规约 1. [强制]表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint ( 1 表示是,0 表示否). 说明:任何字段如果为非负数,必须 ...

  4. C#-Windows服务创建和运行

    Windows服务创建和运行    适用场景: ASP.Net通常是一个无状态的提供程序,不支持持续运行代码或者定时执行某段代码,所以我们需要构建自己的Windows服务来运行那些定时任务. 项目中需 ...

  5. Java知识回顾 (16)常用操作的Java示例

    环境设置 Java 实例 – 如何编译一个Java 文件? Java 实例 – Java 如何运行一个编译过的类文件? Java 实例 - 如何执行指定class文件目录(classpath)? Ja ...

  6. 英语Bisynes商务

    英语bisynes商务概念的提出是改革的产物,有一个演变的过程:贸易部--商业部.外贸部--内贸部--内贸局--商务部.是内外贸一体化的概念. 中文名:商务 外文名:Business,Bisynes商 ...

  7. FI-FBV0 - No batch input data for screen SAPMF05A 0700

    在预制凭证过账的时候报错:没有屏幕SAPMF05A 0700 的批输入数据 https://answers.sap.com/questions/7203025/fbv0-no-batch-input- ...

  8. PHP 将json的int类型转换为string类型 解决php bigint转科学计数法的问题

    /** * 将json的int类型转换为string类型 * @param $str * @param int $minLength 最小的转换位数,即只有大于等于这个长度的数字才会被转换为字符串 * ...

  9. 洛谷 P2921 在农场万圣节Trick or Treat on the Farm题解

    题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定 ...

  10. Vue和微信小程序区别

    一.生命周期 先贴两张图: vue生命周期 小程序生命周期 相比之下,小程序的钩子函数要简单得多. vue的钩子函数在跳转新页面时,钩子函数都会触发,但是小程序的钩子函数,页面不同的跳转方式,触发的钩 ...