修改:维护g[i][j]表示第i个数为j的概率,从前往后转移

转移方程:g[id][i]=g[id][i-1]*p+g[id][i]*(1-p),初始g[i][a[i]]=1

询问:对于每一个人i,输出sigma(P(除了i有j个正数)/(j+1))*P(i是正数)

P(i是正数)就是1-g[i][0],以下简写为h[i],j+1的逆元可以预处理出来

考虑P(除了i有j个正数),用f[j]表示前i个数有j个正数的概率

转移方程(滚动后):f[j]=f[j]*g[i][0]+f[j-1]*h[i],初始[0]=1

那么相当于要去掉i,设f'[j]=P(除了i有j个正数),则有转移:

f[j]=f'[j]*g[i][0]+f'[j-1]*h[i],f'[j]=(f[j]-f'[j-1]*h[i])/g[i][0](递推即可)

(需要特判g[i][0]=0,此时相当于他一定活着,那么f'[j]=f[j+1])

最终的期望可以用g来算,对于第i个人,即sigma(j*g[i][j])

,总时间复杂度为o(Qn+Cn^2logn),可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define mod 998244353
4 int n,m,p,x,y,z,a[205],f[205],inv[205],g[205][105];
5 int ksm(int n,int m){
6 if (!m)return 1;
7 int s=ksm(n,m>>1);
8 s=1LL*s*s%mod;
9 if (m&1)s=1LL*s*n%mod;
10 return s;
11 }
12 int main(){
13 scanf("%d",&n);
14 inv[0]=inv[1]=1;
15 for(int i=1;i<=n;i++){
16 scanf("%d",&x);
17 g[i][x]=1;
18 }
19 for(int i=2;i<=n;i++)inv[i]=1LL*(mod-mod/i)*inv[mod%i]%mod;
20 scanf("%d",&m);
21 for(int i=1;i<=m;i++){
22 scanf("%d%d",&p,&x);
23 if (!p){
24 scanf("%d%d",&y,&z);
25 y=1LL*y*ksm(z,mod-2)%mod;
26 g[x][0]=(g[x][0]+1LL*g[x][1]*y)%mod;
27 for(int j=1;j<=100;j++)
28 g[x][j]=(g[x][j]*(mod+1LL-y)+1LL*g[x][j+1]*y)%mod;
29 }
30 else{
31 f[0]=1;
32 for(int j=1;j<=x;j++)f[j]=0;
33 for(int j=1;j<=x;j++){
34 scanf("%d",&y);
35 a[j]=g[y][0];
36 for(int k=j;k;k--)
37 f[k]=(1LL*f[k]*a[j]+f[k-1]*(mod+1LL-a[j]))%mod;
38 f[0]=1LL*f[0]*a[j]%mod;
39 }
40 for(int j=1;j<=x;j++){
41 y=z=0;
42 int t=ksm(a[j],mod-2);
43 for(int k=0;k<x;k++){
44 if (!a[j])z=f[k+1];
45 else z=(f[k]-z*(mod+1LL-a[j])%mod+mod)*t%mod;
46 y=(y+1LL*z*inv[k+1])%mod;
47 }
48 printf("%lld ",y*(mod+1LL-a[j])%mod);
49 }
50 printf("\n");
51 }
52 }
53 for(int i=1;i<=n;i++){
54 x=0;
55 for(int j=1;j<=100;j++)x=(x+1LL*j*g[i][j])%mod;
56 printf("%d ",x);
57 }
58 }

[bzoj5340]假面的更多相关文章

  1. BZOJ5340: [Ctsc2018]假面

    BZOJ5340: [Ctsc2018]假面 https://lydsy.com/JudgeOnline/problem.php?id=5340 分析: 背包,只需要求\(g_{i,j}\)表示强制活 ...

  2. BZOJ5340 [Ctsc2018]假面 【概率dp】

    题目链接 BZOJ5340 题解 我们能很容易维护每个人当前各种血量的概率 设\(p[u][i]\)表示\(u\)号人血量为\(i\)的概率 每次攻击的时候,讨论一下击中不击中即可转移 是\(O(Qm ...

  3. BZOJ5340: [Ctsc2018]假面【概率+期望】【思维】

    LINK 思路 首先考虑减血,直接一个dp做过去,这个部分分不难拿 然后是\(op=1\)的部分 首先因为要知道每个人被打的概率,所以需要算出这个人活着的时候有多少个人活着时概率是什么 那么用\(g_ ...

  4. BZOJ5340 & 洛谷4564 & LOJ2552:[CTSC2018]假面——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5340 https://www.luogu.org/problemnew/show/P4564 ht ...

  5. 并不对劲的bzoj5340:loj2552:uoj399:p4564: [Ctsc2018]假面

    题目大意 有\(n\)(\(n\leq200\))个非负整数\(m_1,m_2,...,m_n\)(\(\forall i\in[1,n],m_i\leq100\)),有\(q\)(\(q\leq2* ...

  6. BZOJ 1064 假面舞会(NOI2008) DFS判环

    此题,回想Sunshinezff学长给我们出的模拟题,原题啊有木有!!此处吐槽Sunshinezff爷出题不人道!! 不过也感谢Sunshinezff学长的帮助,我才能做出来.. 1064: [Noi ...

  7. 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]

    BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1655  Solved: 798[Submit][S ...

  8. [BZOJ1064][Noi2008]假面舞会

    [BZOJ1064][Noi2008]假面舞会 试题描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢 ...

  9. 1064: [Noi2008]假面舞会 - BZOJ

    Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...

随机推荐

  1. 深入理解Java虚拟机之JVM内存布局篇

    内存布局**** ​ JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...

  2. VS 调试 提示 Lc.exe已退出 代码为-1问题解决方法

    找到程序项目下Properties文件夹licenses.licx文件,然后右键选择删除就可以了,调试运行正常了 https://jingyan.baidu.com/article/b24f6c822 ...

  3. 分布式/微服务必配APM系统,SkyWalking让你不迷路

    前言 如今分布式.微服务盛行,面对拆分服务比较多的系统,如果线上出现异常,需要快速定位到异常服务节点,假如还用传统的方式排查肯定效率是极低的,因为服务之间的各种通信会让定位更加繁琐:所以就急需一个分布 ...

  4. 【原创】Linux v4l2框架分析

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  5. [源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎

    [源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎 目录 [源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎 0x00 摘要 0x01 前文回顾 1.1 训 ...

  6. 电脑cmd命令快速查看连接过的WIFI密码信息

    只是突然发现,好奇心作怪,试了一下,妈妈再也不用担心我忘记家里的wifi密码了 1.直接打开"运行"(win键+R) 2.输入CMD 确定 3.输入下面cmd命令.鼠标粘贴 for ...

  7. WPF进阶技巧和实战08-依赖属性与绑定03

    数据提供者 在大多数的代码中,都是通过设置元素的DataContext属性或者列表控件的ItemsSource属性,从而提供顶级的数据源.当数据对象是通过另一个类构造时,可以有其他选择. 一种是作为窗 ...

  8. 二进制小数 牛客网 程序员面试金典 C++ Python

    二进制小数 牛客网 程序员面试金典 题目描述 有一个介于0和1之间的实数,类型为double,返回它的二进制表示.如果该数字无法精确地用32位以内的二进制表示,返回"Error". ...

  9. 最短路计数(SPFA× Dijkstra√)

    题目描述 给出一个n个顶点m条边的无向无权图,顶点编号为1−n.问从顶点1开始,到其他每个点的最短路有几条. 输入格式 第一行包含2个正整数n,m,为图的顶点数与边数. 接下来M行,每行2个正整数x, ...

  10. hdu 4288 Coder(单点操作,查询)

    题意: 三种操作: 1. add x – add the element x to the set;2. del x – remove the element x from the set;3. su ...