[CTSC2018]假面(概率DP)
考场上以为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)的更多相关文章
- [CTSC2018] 假面 | 期望 DP
题目链接 LOJ 2552 Luogu P4564 考场上这道题我先是写了个70分暴力,然后发现似乎可以NTT,然鹅问题是--我没学过NTT,遂脑补之,脑补出来了,下午出成绩一看,卡成暴力分(70)- ...
- BZOJ5340: [Ctsc2018]假面
BZOJ5340: [Ctsc2018]假面 https://lydsy.com/JudgeOnline/problem.php?id=5340 分析: 背包,只需要求\(g_{i,j}\)表示强制活 ...
- Codeforces 28C [概率DP]
/* 大连热身D题 题意: 有n个人,m个浴室每个浴室有ai个喷头,每个人等概率得选择一个浴室. 每个浴室的人都在喷头前边排队,而且每个浴室内保证大家都尽可能均匀得在喷头后边排队. 求所有浴室中最长队 ...
- HDU 4405 Aeroplane chess (概率DP)
题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i 这个位置到达 n ...
- POJ 2096 Collecting Bugs (概率DP)
题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...
- POJ 2151 Check the difficulty of problems (概率DP)
题意:ACM比赛中,共M道题,T个队,pij表示第i队解出第j题的概率 ,求每队至少解出一题且冠军队至少解出N道题的概率. 析:概率DP,dp[i][j][k] 表示第 i 个队伍,前 j 个题,解出 ...
- 概率DP light oj 1030
t组数据 n块黄金 到这里就捡起来 出发点1 到n结束 点+位置>n 重掷一次 dp[i] 代表到这里的概率 dp[i]=(dp[i-1]+dp[i-2]... )/6 如果满6个的话 否则 ...
- hdu 4050 2011北京赛区网络赛K 概率dp ***
题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...
- [转]概率DP总结 by kuangbin
概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...
随机推荐
- Python学习-day18 Web框架
众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...
- NGUI-使用UILabel呈现图片和不同格式的文字
1.可以使用BBCode标记 [b]Bold[/b] 粗体[i]italic[/i] 斜体[u]underli ...
- 事件Qevent的接受和忽略 和重定义 事件过滤器(转)
转载来源:http://blog.csdn.net/seanyxie/article/details/5821970 事件处理流程:某个事件发生------>exec()循环会接收到这个事件-- ...
- Day1 Toast/Menu/Intent传递数据
** --------------->未经允许,禁止转载<----------------** 今天是我读<第二行代码>的第一天,也是我第一次开始写CSDN博客,之前的笔记都在 ...
- Opencv3.0.0安装包
这个资源是Opencv3.0.0安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载
- 放映PPT幻灯片演示文稿如何让演讲者备注不投影到屏幕上(转载)
ps files/ps.rar 放映PPT幻灯片演示文稿如何让演讲者备注不投影到屏幕上 如题,在PPT幻灯片的演示文稿中加入演讲者备注(使用PPT讲座时苦于有时会忘记一些要讲的数字,文字等),但是在 ...
- perror表
#define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #defi ...
- Android M中 JNI的入门学习
今年谷歌推出了Android 6.0,作为安卓开发人员,对其学习掌握肯定是必不可少的,今天小编和大家分享的就是Android 6.0中的 JNI相关知识,这是在一个安卓教程网上看到的内容,感觉很不错, ...
- registry --------->仓库 ----------------->镜像
registry --------->仓库 ----------------->镜像 本地镜像都保存在宿主机下 : /var/lib/docker/containers 镜像从仓库下载下来 ...
- Hadoop中maptask数量的决定因素
刚开始接触hadoop平台的时候 部分初学者对于mapreduce中的maptask的数量是怎么确定的 可能有点迷惑,如果看了jobclient里面的maptask初始化的那段源码,那么就比较清楚了, ...