修改:维护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. android和IOS自动化定位方法

    元素定位 方法:id定位,name定位(text定位),class_name定位, accessibility_id定位,xpath定位等 (目前1.5版本的已经不支持name定位了),所以APP的定 ...

  2. Java(32)File类的介绍

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228444.html 博客主页:https://www.cnblogs.com/testero ...

  3. iostream 操作符

    iostream 操作符 Input/output manipulators - cppreference.com

  4. 【UE4 C++】UGameplayStatics 源代码

    // Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" # ...

  5. 【UE4 设计模式】原型模式 Prototype Pattern

    概述 描述 使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.如孙悟空猴毛分身.鸣人影之分身.剑光分化.无限剑制 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象, ...

  6. [no_code][Alpha]项目展示博客

    $( "#cnblogs_post_body" ).catalog() 团队项目链接 github 后端 github OCR文档-含部分所需测试代码目前private API调用 ...

  7. Envoy实现.NET架构的网关(三)代理GRPC

    什么是GRPC gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架.gRPC 的主要好处是: 现代.高性能.轻量级的 RPC 框架. 契约优先的 API 开发,默认使用协议缓冲区,与语言无 ...

  8. Python gpu 显卡小工具 gpu

    安装 pip install gpustat 或者 换源 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade gpust ...

  9. hdu 1856 More is better(并查集)

    题意: Mr Wang wants some boys to help him with a project. Because the project is rather complex, the m ...

  10. hdu 2190 重建希望小学(数学,递推)

    题意: N*3的教室,有2种砖,2*2.1*1. 问铺设教室的方案有多少种.(要铺满) 思路: 画一下图可以很快发现递推公式 代码: int main(){ int a[35]; mem(a,0); ...