uoj#399. 【CTSC2018】假面(概率期望)
记\(p_{i,j}\)为\(i\)还剩\(j\)滴血的概率,那么\(i\)最后血量的期望就是$$E_i=\sum_{j=0}^{m_i}j\times p_{i,j}$$
然后\(p\)数组也很好转移,记这一次\(i\)收到伤害的概率为\(q\),那么转移方程为$$p'{i,0}=p{i,0}\times q$$
\]
于是操作\(1\)就解决了
然后考虑操作\(2\)是个什么玩意儿
记\(px_i\)为\(i\)还活着的概率,那么\(px_i=1-p_{i,0}\)
那么选到\(i\)的概率就是$$px_i\times \sum_{j=0}^{k-1}\frac{f_j}{j+1}$$
总共有\(k\)个人,枚举剩下还活着几个,\(f_j\)为除\(i\)外还有\(j\)个人活着的概率
设\(g_i\)为这\(k\)个人中任意活着\(i\)个人的概率,那么我们可以枚举每一个人\(x\),那么\(g\)也很容易转移$$g'i=px_x\times g{i-1}+(1-px_x)\times g_i$$
那么对于\(i\),\(f\)也很容易计算了$$f_j=\frac{g_j-px_i\times f_{j-1}}{1-px_i}$$
边界条件为\(f_0=\frac{g_0}{1-px_i}\)
可以这么理解,除了\(i\)之外还活了\(j\)个人的情况,就是总共活了\(j\)个人的情况,减去这\(j\)个人里面有\(i\)的情况,然而现在算出来的概率里面\(i\)是必死的,要除掉
总的复杂度为\(O(Qm+Cn^2)\)
//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
inline int min(const R int &x,const R int &y){return x<y?x:y;}
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
const int N=205,P=998244353;
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int ksm(R int x,R int y){
R int res=1;
for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x);
return res;
}
char sr[1<<21],z[20];int C=-1,Z=0;
inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
void print(R int x){
if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x;
while(z[++Z]=x%10+48,x/=10);
while(sr[++C]=z[Z],--Z);sr[++C]=' ';
}
int f[N],g[N],w[N],px[N],inv[N],p[N][N];
int Inv(R int x){return x<N?inv[x]:1ll*(P-P/x)*Inv(P%x)%P;}
int n,m,q,op,x,a,b,res;
int main(){
// freopen("testdata.in","r",stdin);
n=read();
fp(i,1,n)w[i]=read(),p[i][w[i]]=1;
inv[0]=inv[1]=1;fp(i,2,N-1)inv[i]=1ll*(P-P/i)*inv[P%i]%P;
q=read();
while(q--){
op=read();
if(op==0){
x=read(),a=read(),b=read();
a=mul(a,Inv(b)),b=dec(1,a);
p[x][0]=add(p[x][0],mul(p[x][1],a));
fp(i,1,w[x])p[x][i]=add(mul(p[x][i+1],a),mul(p[x][i],b));
}else{
m=read();fp(i,1,m)x=read(),px[i]=dec(1,p[x][0]),g[i]=0;g[0]=1;
fp(i,1,m)fd(j,i,0)g[j]=add(j?mul(px[i],g[j-1]):0,mul(dec(1,px[i]),g[j]));
fp(i,1,m){
if(!px[i]){print(0);continue;}
if(px[i]==1)fp(j,0,m-1)f[j]=g[j+1];
else{
x=Inv(dec(1,px[i])),f[0]=mul(g[0],x);
fp(j,1,m-1)f[j]=mul(dec(g[j],mul(f[j-1],px[i])),x);
}fp(j,0,m-1)res=add(res,mul(f[j],inv[j+1]));
print(mul(res,px[i]));res=0;
}sr[C]='\n';
}
}
fp(i,1,n){
res=0;
fp(j,1,w[i])res=add(res,mul(j,p[i][j]));
print(res);
}
return Ot(),0;
}
uoj#399. 【CTSC2018】假面(概率期望)的更多相关文章
- [CTSC2018]假面(概率DP)
考场上以为CTSC的概率期望题都不可做,连暴力都没写直接爆零. 结果出来发现全场70以上,大部分AC,少于70的好像极少,感觉血亏. 设a[i][j]表示到当前为止第i个人的血量为j的概率(注意特判血 ...
- UOJ #214 合唱队形 (概率期望计数、DP、Min-Max容斥)
9个月的心头大恨终于切掉了!!!! 非常好的一道题,不知为何uoj上被点了70个差评. 题目链接: http://uoj.ac/problem/214 题目大意: 请自行阅读. 题解: 官方题解讲得相 ...
- 洛谷 P4564 [CTSC2018]假面(期望+dp)
题目传送门 题意: 有 \(n\) 个怪物,第 \(i\) 个怪物初始血量为 \(m_i\).有 \(Q\) 次操作: 0 x u v,有 \(p=\frac{u}{v}\) 的概率令 \(m_x\) ...
- UOJ#299. 【CTSC2017】游戏 线段树 概率期望 矩阵
原文链接www.cnblogs.com/zhouzhendong/p/UOJ299.html 前言 不会概率题的菜鸡博主做了一道概率题. 写完发现运行效率榜上的人都没有用心卡常数——矩阵怎么可以用数组 ...
- BZOJ5340: [Ctsc2018]假面
BZOJ5340: [Ctsc2018]假面 https://lydsy.com/JudgeOnline/problem.php?id=5340 分析: 背包,只需要求\(g_{i,j}\)表示强制活 ...
- 【BZOJ-1419】Red is good 概率期望DP
1419: Red is good Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 660 Solved: 257[Submit][Status][Di ...
- uvalive 7331 Hovering Hornet 半平面交+概率期望
题意:一个骰子在一个人正方形内,蜜蜂在任意一个位置可以出现,问看到点数的期望. 思路:半平面交+概率期望 #include<cstdio> #include<cstring> ...
- OI队内测试一【数论概率期望】
版权声明:未经本人允许,擅自转载,一旦发现将严肃处理,情节严重者,将追究法律责任! 序:代码部分待更[因为在家写博客,代码保存在机房] 测试分数:110 本应分数:160 改完分数:200 T1: 题 ...
- 2016 多校联赛7 Balls and Boxes(概率期望)
Mr. Chopsticks is interested in random phenomena, and he conducts an experiment to study randomness. ...
- 牛客网多校赛第9场 E-Music Game【概率期望】【逆元】
链接:https://www.nowcoder.com/acm/contest/147/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
随机推荐
- mac下编译FFmpeg-Android
参考: [史上最傻瓜的]mac下编译FFmpeg-Android http://blog.csdn.net/ashqal/article/details/9381037
- com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '88888888' for key 'PRIMARY'
严重: Servlet.service() for servlet jsp threw exceptioncom.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityC ...
- Laravel5.5执行表迁移命令出现表为空的解决方案
今天在使用一个第三方包 laravel-admin 时,出现了这样的错误:SQLSTATE[42000]: Syntax error or access violation: 1103 Incorre ...
- EASYARM-IMX283 编译uboot和uImage
本文是按照IMX283配套光盘的流程重新编译uboot和uImage将光盘中的gcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2 解压 ...
- 解决使用mybatis做批量操作时发生的异常:Parameter '__frch_item_0' not found. Available parameters are [list] 记录
本文主要描述 使用mybatis进行批量更新.批量插入 过程中遇到的异常及总结: 首先贴出使用批量操作报的异常信息: java.lang.RuntimeException: org.mybatis.s ...
- MIS系统中的报表测试
报表功能的基本要求,就是通过查询/统计/分析,提供用户所需的准确的数据.如果无法实现这个基本功能,则报表完全失去意义. 对于用户来说,报表可以直接影响到他们的决策,例如可能因为报表对销售和库存情况反映 ...
- jsonp跨域请求,动态script标签实现跨域
1.什么是跨域 首先一个域名地址的组成是: http://www.xxx.com:8080/xxx/xxx.jsp 协议子域名主域名端口号请求资源地址 当协议.子域名.主域名.端口号中任意一个不相同时 ...
- win32com操作word(3):导入VBA常量
导入VBA常量方法:http://blog.sina.com.cn/s/blog_a73687bc0101k8x8.html 我们之前说过,win32com组件为python提供处理COM组件(.dl ...
- nginx 轮询模式 nginx_upstream_jvm_route 插件安装
使用nginx_upstream_jvm_route插件的目的是为了保证在轮询机制下的session的共享 前提:源码方式安装nginx.patch命令 1.下载nginx_upstream_jvm_ ...
- POJ3580:SuperMemo
浅谈\(splay\):https://www.cnblogs.com/AKMer/p/9979592.html 浅谈\(fhq\)_\(treap\):https://www.cnblogs.com ...