考场上以为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. Python 3基础教程2-打印语句和字符串

    本文介绍Python 3中的打印语句和字符串使用,具体练习请看下面的demo.py print ('Hello Python 3!') """文本讲打印语句和字符串打印语 ...

  2. eclipse里导入maven项目有红叉的解决办法

    导入maven的项目上有红叉,说明eclipse里maven的插件该更新了 1.help里选择install new software 2.点击add,输入name:MavenArchiver, lo ...

  3. linux kernal oom killer 学习

    背景 我有2个定时任务,一个任务A是00:00开跑,另一个B是04:00开跑.正常情况下A会在2点多时候跑完,但是某一天因为某一步骤用的时间过久,导致4点还没跑完,这时候A内存占用大约在12g左右.4 ...

  4. Linux中awk后面的RS, ORS, FS, OFS 含义

    转载自http://blog.csdn.net/qq416647781/article/details/40649419   一.RS 与 ORS 差在哪   我们经常会说,awk是基于行列操作文本的 ...

  5. ZooKeeper客户端 zkCli.sh 节点的配额设置

    首先使用 zkCli.sh 连接上ZooKeeper服务器 配额设置命令格式如下: setquota -n|-b val path -n:val设置子节点个数 -b:val设置节点的数据长度 如果我们 ...

  6. NAT64与DNS64基本原理概述

    NAT64与DNS64基本原理概述 1.NAT64与DNS64背景     在IPv6网络的发展过程中,面临最大的问题应该是IPv6与IPv4的不兼容性,因此无法实现二种不兼容网络之间的互访.为了实现 ...

  7. BZOJ2631 tree 【LCT】

    题目 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原有的边( ...

  8. PHP error_reporting

        E_ERROR    致命错误,脚本执行中断,就是脚本中有不可识别的东西出现 E_WARNING    部分代码出错,但不影响整体运行 E_PARSE    字符.变量或结束的地方写规范有误 ...

  9. angular组件--tips提示功能

    将组件封装起来在项目中开发很实用,之前遭遇过一次痛苦的经历,那阵子改的要吐血了.常用的组件封装起来,改公共的地方,往往多处受用. 例如:我在项目中引用  tips.text('加载中...',fals ...

  10. (转)python爬虫----(scrapy框架提高(1),自定义Request爬取)

    摘要 之前一直使用默认的parse入口,以及SgmlLinkExtractor自动抓取url.但是一般使用的时候都是需要自己写具体的url抓取函数的. python 爬虫 scrapy scrapy提 ...