考场上以为CTSC的概率期望题都不可做,连暴力都没写直接爆零。

结果出来发现全场70以上,大部分AC,少于70的好像极少,感觉血亏。

设a[i][j]表示到当前为止第i个人的血量为j的概率(注意特判血量为0的情况)。那么a[i][0]则为这个人的死亡率。

设dp[i]表示当前指定集合中,有i个人存活的概率。

可以发现a[][]和是可以推导出dp[]的,直接DP可以得到70分。同时发现dp[]存在逆变换,所以复杂度就可以通过了。

但是如果写丑了还是会被卡掉,优化方法可以加快读,减少取模次数,以及预处理逆元。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
typedef long long ll;
using namespace std; const int N=,mod=;
int n,K,Q,op,id,u,v,ans,h[N],s[N],inv[N],dp[N],dp1[N],a[N][N]; int rd(){
int x=; bool t=; char ch=getchar();
while (ch<'' || ch>'') t|=(ch=='-'),ch=getchar();
while (ch>='' && ch<='') x=x*+ch-'',ch=getchar();
if (t) return -x; else return x;
} int ksm(int a,int b){
int res;
for (res=; b; a=1ll*a*a%mod,b>>=)
if (b & ) res=1ll*res*a%mod;
return res;
} int main(){
freopen("faceless.in","r",stdin);
freopen("faceless.out","w",stdout);
n=rd(); rep(i,,n) h[i]=rd(),a[i][h[i]]=;
inv[]=; rep(i,,n) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for (Q=rd(); Q--; ){
op=rd();
if (op==){
id=rd(); u=rd(); v=rd(); int vv=ksm(v,mod-);
a[id][]=(a[id][]+1ll*a[id][]*u%mod*vv%mod)%mod;
rep(i,,h[id])
a[id][i]=(1ll*a[id][i]*(-1ll*u*vv%mod+mod)+1ll*a[id][i+]*u%mod*vv)%mod;
}else{
K=rd();
rep(i,,K) dp[i]=; dp[]=;
rep(i,,K){
s[i]=rd();
for (int j=i; ~j; j--) dp[j]=(1ll*(-a[s[i]][]+mod)*dp[j-]+1ll*a[s[i]][]*dp[j])%mod;
}
rep(i,,K){
ans=; rep(j,,K) dp1[j]=;
if (!a[s[i]][]) rep(j,,K-) ans=(ans+1ll*dp[j+]*inv[j+])%mod;
else{
int res=; rep(j,,K) if (j!=i) res=1ll*res*a[s[j]][]%mod; dp1[]=res;
rep(j,,K-){
if (j>) dp1[j]=1ll*(dp[j]-1ll*(-a[s[i]][])*dp1[j-]%mod+mod)%mod*ksm(a[s[i]][]%mod,mod-)%mod;
ans=(ans+1ll*dp1[j]*inv[j+])%mod;
}
}
ans=1ll*ans*(-a[s[i]][]+mod)%mod; printf("%d ",ans);
}
puts("");
}
}
rep(i,,n){
ans=;
rep(j,,h[i]) ans=(ans+1ll*j*a[i][j])%mod;
printf("%d ",ans);
}
puts("");
return ;
}

[CTSC2018]假面(概率DP)的更多相关文章

  1. [CTSC2018] 假面 | 期望 DP

    题目链接 LOJ 2552 Luogu P4564 考场上这道题我先是写了个70分暴力,然后发现似乎可以NTT,然鹅问题是--我没学过NTT,遂脑补之,脑补出来了,下午出成绩一看,卡成暴力分(70)- ...

  2. BZOJ5340: [Ctsc2018]假面

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

  3. Codeforces 28C [概率DP]

    /* 大连热身D题 题意: 有n个人,m个浴室每个浴室有ai个喷头,每个人等概率得选择一个浴室. 每个浴室的人都在喷头前边排队,而且每个浴室内保证大家都尽可能均匀得在喷头后边排队. 求所有浴室中最长队 ...

  4. HDU 4405 Aeroplane chess (概率DP)

    题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i  这个位置到达 n ...

  5. POJ 2096 Collecting Bugs (概率DP)

    题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...

  6. POJ 2151 Check the difficulty of problems (概率DP)

    题意:ACM比赛中,共M道题,T个队,pij表示第i队解出第j题的概率 ,求每队至少解出一题且冠军队至少解出N道题的概率. 析:概率DP,dp[i][j][k] 表示第 i 个队伍,前 j 个题,解出 ...

  7. 概率DP light oj 1030

    t组数据 n块黄金 到这里就捡起来 出发点1 到n结束  点+位置>n 重掷一次 dp[i] 代表到这里的概率 dp[i]=(dp[i-1]+dp[i-2]... )/6  如果满6个的话 否则 ...

  8. hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...

  9. [转]概率DP总结 by kuangbin

    概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...

随机推荐

  1. Linq语法和C#6.0

    一. linq 1.简介: 能用linq实现的基本都可以用扩展方法实现: 举例: 查询ID>1的狗有如下两种写法 (1)var  r1=dogs.where(d=>d.id>1) ( ...

  2. 【志银】php5.6-Apache2.4-mysql5.6环境配置(win7_64位)

    ----------------------------------------------------- ★软件工具:(下载时注意下载相应版本,不同版本安装细节可能会有差异!!) 1>http ...

  3. apache无法启动解决办法

    最近我的Apache老是无法启动 查看端口是否被占用? 这些方法网上一大堆,终于有一个能解决我的问题,赶紧摘抄下来,方便自己使用! 1.win+R,输入cmd, 2.进入命令行界面输入[netstat ...

  4. Ext JS 的一个非常好的学习网站

    起飞网 http://www.qeefee.com/zt-extjs 发现一个非常好的学习ExtJS的中文网站

  5. ExtJS Ext.MessageBox.alert()弹出对话框详解

    Ext.MessageBox是一个工具类,他继承自Obiect对象,用来生成各种风格的信息提示对话框,Ext.Msg是该类的别名,使用Ext.MessageBox和用Ext.Msg效果是一样的,而后者 ...

  6. shell之netstat命令

      语 法:netstat [-acCeFghilMnNoprstuvVwx] [-A<网络类型>][--ip] 补充说明:利用netstat指令可让你得知整个Linux系统的网络情况. ...

  7. HDU 3954 Level up (线段树特殊懒惰标记)

    http://blog.csdn.net/acm_cxlove/article/details/7548087 感觉最巧的是定义了min_dis……将区间内有无英雄升级分开处理 #include &l ...

  8. NYOJ 42 一笔画

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...

  9. 【bzoj4894】天赋 矩阵树定理

    题目描述 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有一些天赋必须是要有前置天赋才能够学习得到的.也就是说,有一些天赋必须是要在学习了另一个天赋 ...

  10. RocketMQ 源码分析 RouteInfoManager(四)

    在上一章分析了NamesrvController的构造函数时,会生成一个RouteInfoManager对象,该对象存放着整个消息集群的相关消息,所以这里单独拿出来分析.其实试想一下namesrv的功 ...