bzoj 5340: [Ctsc2018]假面
Description
Solution
生命值范围比较小,首先维护每一个人在每个血量的概率,从而算出生存的概率,设为 \(a[i]\)
询问时,只需要考虑生存的人数,可以 \(DP\)
设 \(g[i][j]\) 表示前 \(i\) 个人活了 \(j\) 个的概率
\(g[i][j]=g[i-1][j-1]*a[i]+g[i-1][j]*(1-a[i])\)
那么考虑每一个人时,我们对其他人做这个 \(DP\) 就行了,可以做 \(O(C*n^3)\)
实际上这是个生成函数 \((a[i]*x+1-a[i])\) ,最终求出的是每一个人的乘积,除掉 \(i\) 这个人的就是我们暴力求出来的 \(DP\) 数组
这样的话是可逆的,我们减去 \((1-a[i])\) 的项,剩下的就都是 \(a[i]\) 的项了,逆推一下即可
#include<bits/stdc++.h>
using namespace std;
template<class T>void gi(T &x){
int f;char c;
for(f=1,c=getchar();c<'0'||c>'9';c=getchar())if(c=='-')f=-1;
for(x=0;c<='9'&&c>='0';c=getchar())x=x*10+(c&15);x*=f;
}
const int N=205,M=1005,mod=998244353;
inline int qm(int x,int k){
int sum=1;
while(k){
if(k&1)sum=1ll*sum*x%mod;
x=1ll*x*x%mod;k>>=1;
}
return sum;
}
int f[N][M],n,m[N],Q,op,x,p,q,h[N],a[N],tot,c[N],g[N][N],inv[N],res[N];
inline void Modify(){
gi(x);gi(p);gi(q);
p=1ll*p*qm(q,mod-2)%mod;q=(1-p+mod)%mod;
h[0]=(f[x][0]+1ll*f[x][1]*p)%mod;
for(int i=m[x];i>=1;i--)h[i]=(1ll*f[x][i+1]*p+1ll*f[x][i]*q)%mod;
for(int i=m[x];i>=0;i--)f[x][i]=h[i],h[i]=0;
}
inline void solve(){
gi(tot);
for(int i=1;i<=tot;i++){
gi(x);
a[i]=(1-f[x][0]+mod)%mod;
}
memset(g,0,sizeof(g));
g[0][0]=1;
for(int i=1;i<=tot;i++){
g[i][0]=g[i-1][0]*(1-a[i]+mod)%mod;
for(int j=0;j<=i;j++)
g[i][j]=(1ll*g[i-1][j-1]*a[i]+1ll*g[i-1][j]*(1-a[i]+mod))%mod;
}
for(int i=1;i<=tot;i++){
int I=qm(a[i],mod-2),ans=0;
for(int j=1;j<=tot;j++)h[j]=g[tot][j];
for(int j=tot;j>=1;j--){
ans=(ans+1ll*I*h[j]%mod*inv[j])%mod;
h[j-1]=(h[j-1]-1ll*h[j]*(1-a[i]+mod)%mod*I)%mod;
h[j]=0;
}
if(ans<0)ans+=mod;
ans=1ll*ans*a[i]%mod;
printf("%d ",ans);
}
puts("");
}
int main(){
freopen("pp.in","r",stdin);
freopen("pp.out","w",stdout);
for(int i=1;i<N;i++)inv[i]=qm(i,mod-2);
cin>>n;
for(int i=1;i<=n;i++)gi(m[i]),f[i][m[i]]=1;
cin>>Q;
while(Q--){
gi(op);
if(op==0)Modify();
else solve();
}
for(int i=1;i<=n;i++){
int ans=0;
for(int j=1;j<=m[i];j++)ans=(ans+1ll*f[i][j]*j)%mod;
printf("%d ",ans);
}
return 0;
}
bzoj 5340: [Ctsc2018]假面的更多相关文章
- BZOJ5340: [Ctsc2018]假面
BZOJ5340: [Ctsc2018]假面 https://lydsy.com/JudgeOnline/problem.php?id=5340 分析: 背包,只需要求\(g_{i,j}\)表示强制活 ...
- [BZOJ]1064: [Noi2008]假面舞会
题目大意:n个人,k种假面,每人戴一种,戴第i种的可以看见第i+1种,戴第k种的可以看见第1种,给出m条关系表示一个人可以看到另一个人,问k可能的最大值和最小值.(n<=100,000,m< ...
- BZOJ5340 & 洛谷4564 & LOJ2552:[CTSC2018]假面——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5340 https://www.luogu.org/problemnew/show/P4564 ht ...
- [Bzoj]5343: [Ctsc2018]混合果汁
5343: [Ctsc2018]混合果汁 题目描述 小 R 热衷于做黑暗料理,尤其是混合果汁. 商店里有 \(n\) 种果汁,编号为 \(0,1,\cdots,n-1\) .\(i\) 号果汁的美味度 ...
- [bzoj 1064][NOI2008]假面舞会(dfs判断环)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1064 分析: 如果a看到b,则a->b 那么: 1.如果图中有环,则说明这个环的 ...
- [CTSC2018] 假面 | 期望 DP
题目链接 LOJ 2552 Luogu P4564 考场上这道题我先是写了个70分暴力,然后发现似乎可以NTT,然鹅问题是--我没学过NTT,遂脑补之,脑补出来了,下午出成绩一看,卡成暴力分(70)- ...
- bzoj 1064 noi2008 假面舞会题解
莫名其妙的变成了我们的noip互测题... 其实这题思想还是比较简单的,只是分类不好分而已 其实就是一个dfs的事 首先,非常明显,原题目中的所有关系可以抽象成一个图(这是...显而易见的吧...) ...
- BZOJ 1064: [Noi2008]假面舞会(dfs + 图论好题!)
http://www.lydsy.com/JudgeOnline/problem.php?id=1064 题意: 思路: 考虑以下几种情况: ①无环并且是树: 无环的话就是树结构了,树结构的话想一下就 ...
- BZOJ5340: [Ctsc2018]假面【概率+期望】【思维】
LINK 思路 首先考虑减血,直接一个dp做过去,这个部分分不难拿 然后是\(op=1\)的部分 首先因为要知道每个人被打的概率,所以需要算出这个人活着的时候有多少个人活着时概率是什么 那么用\(g_ ...
随机推荐
- vs2010远程调试断点无效问题
ps:本人按照下面的方式设置成功,个人感觉写的也比较清楚 来源:http://www.cnblogs.com/OpenCoder/archive/2010/02/17/1668983.html v ...
- 自用 Pycharm 主题配色分享(主题才是开发第一生产力)
写在前面的话 是的,我又回来了,上一篇[使用 Visual Studio Code(VSCode)搭建简单的 Python + Django 开发环境]才说真香,结果用两天就发现很多恶心的问题拦住了菜 ...
- CPU制造全过程(图文全解)
沙子:硅是地壳内第二丰富的元素,而脱氧后的沙子(尤其是石英)最多包含25%的硅元素,以二氧化硅(SiO2)的形式存在,这也是半导体制造产业的基础. 硅熔炼:12英寸/300毫米晶圆级.通过 ...
- 使用django进行发送 邮件
我们来看一下 django发送 邮件的整个流程 第一步:例先去 网易163注册账号并激活发邮件功能 把授权码进行 开启 来到我们的项目setting中进行 一个配置: # 邮箱的配置信息 EMAIL_ ...
- 八大排序算法的python实现(五)堆排序
代码 #coding:utf-8 #author:徐卜灵 # 堆排序适用于记录数很多的情况 #与快速排序,归并排序 时间复杂一样都是n*log(n) ######################### ...
- Resurrectio-capserjs的自动化脚本录制工具
[根据github上的文档说明整理] Phantom下的任何操作都可以录制 Resurrectio是一个Chrome插件,他可以记录浏览器的操作,并转化成对应的casperjs脚本 Resurrect ...
- Linux管理命令
管理命令 用户管理: useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage 组管理: groupadd, groupdel, ...
- python学习,day2:列表的复制
主要涉及列表的潜复制(第二层受后面修改的影响)和深复制(不受后面修改的影响) 代码如下 # coding=utf-8 # Author: RyAn Bi import copy names = ['A ...
- POJ_2431 Expedition 【数据结构】
一.题面 POJ2431 二.分析 主要说几个坑 1.给出的点需要根据下标排序. 2.根据不同的方式要把起始点或者终点加进去.我没有转换距离,而是直接从起始点到终点根据距离不断相减判断的,那么起点就是 ...
- Fountains(非线段树版(主要是不太会用))
Arkady plays Gardenscapes a lot. Arkady wants to build two new fountains. There are n available foun ...