[bzoj5340]假面
修改:维护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]假面的更多相关文章
- BZOJ5340: [Ctsc2018]假面
BZOJ5340: [Ctsc2018]假面 https://lydsy.com/JudgeOnline/problem.php?id=5340 分析: 背包,只需要求\(g_{i,j}\)表示强制活 ...
- BZOJ5340 [Ctsc2018]假面 【概率dp】
题目链接 BZOJ5340 题解 我们能很容易维护每个人当前各种血量的概率 设\(p[u][i]\)表示\(u\)号人血量为\(i\)的概率 每次攻击的时候,讨论一下击中不击中即可转移 是\(O(Qm ...
- BZOJ5340: [Ctsc2018]假面【概率+期望】【思维】
LINK 思路 首先考虑减血,直接一个dp做过去,这个部分分不难拿 然后是\(op=1\)的部分 首先因为要知道每个人被打的概率,所以需要算出这个人活着的时候有多少个人活着时概率是什么 那么用\(g_ ...
- BZOJ5340 & 洛谷4564 & LOJ2552:[CTSC2018]假面——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5340 https://www.luogu.org/problemnew/show/P4564 ht ...
- 并不对劲的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* ...
- BZOJ 1064 假面舞会(NOI2008) DFS判环
此题,回想Sunshinezff学长给我们出的模拟题,原题啊有木有!!此处吐槽Sunshinezff爷出题不人道!! 不过也感谢Sunshinezff学长的帮助,我才能做出来.. 1064: [Noi ...
- 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]
BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1655 Solved: 798[Submit][S ...
- [BZOJ1064][Noi2008]假面舞会
[BZOJ1064][Noi2008]假面舞会 试题描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢 ...
- 1064: [Noi2008]假面舞会 - BZOJ
Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...
随机推荐
- Elasticsearch 存储成本省 60%,稿定科技干货分享
背景 稿定科技旗下稿定设计产品是一个聚焦商业设计的多场景在线设计平台,打破了软硬件间的技术限制,汇集创意内容与设计工具于一体,为不同场景下的设计需求提供优质的解决方案,满足图片.视频等全类型媒介的设计 ...
- Serverless 在大规模数据处理的实践
作者 | 西流 阿里云技术专家 前言 当您第一次接触 Serverless 的时候,有一个不那么明显的新使用方式:与传统的基于服务器的方法相比,Serverless 服务平台可以使您的应用快速水平扩展 ...
- GDP区域分布图的生成与对比(ArcPy实现)
一.背景 各地区经济协调发展是保证国民经济健康持续稳定增长的关键.GDP是反映各地区经济发展状况的重要指标.科学准确分析各地区GDP空间分布特征,对制定有效措施,指导经济协调发展具有重要参考价值. 二 ...
- 使用.NET(C#或VB.NET)开发NX外部程序
1.如何不用将exe程序拷贝到UGII目录下运行? 答:在调用NX Open命令函数前,将当前目录移动到NX安装目录\UGII\,NX安装目录必须和环境变量UGII_BASE_DIR的值一致,否则报错 ...
- 264.丑数II
题目 给你一个整数 n ,请你找出并返回第 n 个 丑数 . 丑数 就是只包含质因数 2.3 和/或 5 的正整数. 示例 1: 输入:n = 10 输出:12 解释:[1, 2, 3, 4, 5, ...
- 如何获取ISO8601定义的Work Week
工作中遇到一个需求,需要在打印标签的时候打印生产当天的工作周.工作周按照ISO-8601定义的标准计算.找到两种方案. Excel函数 C#代码 Excel函数 非常简单,调用一个Excel自带函数就 ...
- Beta阶段初始任务分配
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-计划-Beta阶段说明书 一.Beta阶段总体规划 根据用户反馈与测试结果修复alpha版本的bu ...
- [no code] Scrum Meeting 博客目录
项目 内容 2020春季计算机学院软件工程(罗杰 任健) 2020春季计算机学院软件工程(罗杰 任健) 作业要求 Scrum Meeting博客目录 我们在这个课程的目标是 远程协同工作,采用最新技术 ...
- SpringBoot整合Prometheus
SpringBoot整合Prometheus 一.需求 二.实现步骤 1.引入jar包 2.application.prometheus文件配置 3.查看指标数据 4.接入到 prometheus 中 ...
- 如何洗白xi校长?(初稿)
看看咱们太子殿下,谁还敢黑全世界最好的太子殿下 我们不如来考虑一下如何给校长洗白. 第一当然是买断热搜了.买断热搜可以阻止消息进一步传播.当然这种操作学校再8月18日晚就已经做过了.8月18日该条消息 ...