[CTSC2018]假面(概率DP)
考场上以为CTSC的概率期望题都不可做,连暴力都没写直接爆零。
结果出来发现全场70以上,大部分AC,少于70的好像极少,感觉血亏。
设a[i][j]表示到当前为止第i个人的血量为j的概率(注意特判血量为0的情况)。那么a[i][0]则为这个人的死亡率。
设dp[i]表示当前指定集合中,有i个人存活的概率。
可以发现a[][]和是可以推导出dp[]的,直接DP可以得到70分。同时发现dp[]存在逆变换,所以复杂度就可以通过了。
但是如果写丑了还是会被卡掉,优化方法可以加快读,减少取模次数,以及预处理逆元。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define rep(i,l,r) for (int i=l; i<=r; i++) 5 typedef long long ll; 6 using namespace std; 7 8 const int N=210,mod=998244353; 9 int n,K,Q,op,id,u,v,ans,h[N],s[N],inv[N],dp[N],dp1[N],a[N][N]; 10 11 int rd(){ 12 int x=0; bool t=0; char ch=getchar(); 13 while (ch<'0' || ch>'9') t|=(ch=='-'),ch=getchar(); 14 while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar(); 15 if (t) return -x; else return x; 16 } 17 18 int ksm(int a,int b){ 19 int res; 20 for (res=1; b; a=1ll*a*a%mod,b>>=1) 21 if (b & 1) res=1ll*res*a%mod; 22 return res; 23 } 24 25 int main(){ 26 freopen("faceless.in","r",stdin); 27 freopen("faceless.out","w",stdout); 28 n=rd(); rep(i,1,n) h[i]=rd(),a[i][h[i]]=1; 29 inv[1]=1; rep(i,2,n) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod; 30 for (Q=rd(); Q--; ){ 31 op=rd(); 32 if (op==0){ 33 id=rd(); u=rd(); v=rd(); int vv=ksm(v,mod-2); 34 a[id][0]=(a[id][0]+1ll*a[id][1]*u%mod*vv%mod)%mod; 35 rep(i,1,h[id]) 36 a[id][i]=(1ll*a[id][i]*(1-1ll*u*vv%mod+mod)+1ll*a[id][i+1]*u%mod*vv)%mod; 37 }else{ 38 K=rd(); 39 rep(i,1,K) dp[i]=0; dp[0]=1; 40 rep(i,1,K){ 41 s[i]=rd(); 42 for (int j=i; ~j; j--) dp[j]=(1ll*(1-a[s[i]][0]+mod)*dp[j-1]+1ll*a[s[i]][0]*dp[j])%mod; 43 } 44 rep(i,1,K){ 45 ans=0; rep(j,0,K) dp1[j]=0; 46 if (!a[s[i]][0]) rep(j,0,K-1) ans=(ans+1ll*dp[j+1]*inv[j+1])%mod; 47 else{ 48 int res=1; rep(j,1,K) if (j!=i) res=1ll*res*a[s[j]][0]%mod; dp1[0]=res; 49 rep(j,0,K-1){ 50 if (j>0) dp1[j]=1ll*(dp[j]-1ll*(1-a[s[i]][0])*dp1[j-1]%mod+mod)%mod*ksm(a[s[i]][0]%mod,mod-2)%mod; 51 ans=(ans+1ll*dp1[j]*inv[j+1])%mod; 52 } 53 } 54 ans=1ll*ans*(1-a[s[i]][0]+mod)%mod; printf("%d ",ans); 55 } 56 puts(""); 57 } 58 } 59 rep(i,1,n){ 60 ans=0; 61 rep(j,1,h[i]) ans=(ans+1ll*j*a[i][j])%mod; 62 printf("%d ",ans); 63 } 64 puts(""); 65 return 0; 66 }
转载于:https://www.cnblogs.com/HocRiser/p/9009730.html
[CTSC2018]假面(概率DP)相关推荐
- P4564 [CTSC2018]假面(期望)
P4564 [CTSC2018]假面 首先容易看出结界技能对第二问敌方剩余生命值期望没有影响. 如何求出第iii个人的剩余生命值期望? 只需要根据Ei=∑j=0aij×fi,jE_i=\sum_{j= ...
- 2018.09.01 poj3071Football(概率dp+二进制找规律)
传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...
- Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]
题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...
- 【原创】概率DP总结 by kuangbin
概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...
- poj 3071 Football(概率dp)
http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...
- HDU 5001 概率DP || 记忆化搜索
2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP 測 ...
- hdu 3853 LOOPS 概率DP
简单的概率DP入门题 代码如下: 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 ...
- HDU - 4035 Maze(概率dp)
题目链接:点击查看 题目大意:给出一个 n 个点的树,初始时位于点 1 ,每个点都会给出一个概率 k[ i ] 和一个概率 e[ i ] ,其代表的意义分别是: k[ i ] :在点 i 有 k[ i ...
- SDUT - 2623 The number of steps(概率dp)
题目链接:点击查看 题目大意:给出一个 n 层的三角形,第一层有 1 个点,第二层有 2 个点,第三层有 3 个点 ... 第 n 层有 n 个点,现在规定从第一层的点向下出发: 如果左下方有点并且右 ...
- 牛客练习赛26B 烟花 (概率DP)
链接:https://ac.nowcoder.com/acm/contest/180/B 来源:牛客网 烟花 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5 ...
最新文章
- android 电量控件,Android实现显示电量的控件代码
- 网络营销重点之如何了解用户需求完善网络营销策略
- viewDidLoad, viewWillDisappear, viewWillAppear等区别及各自的加载顺序
- JavaScript 开发者年度调查报告(2016-01)
- 统计字符串中每种字符类型的个数demo
- 机器学习之琐碎知识(代码运行问题)
- javadocx转换成html_使用Java将Word转为Html或txt[转]
- 三分钟带你看懂prototype原型——ES6进阶
- MatLab imhist
- nds android7.0模拟器,nds最佳MD模拟器jEnesisDS 0.7更新
- 通过池塘配置ip实验
- Android校招复习资料整理
- html表格只设外边框,只设内边框
- 二次函数图像如何用计算机绘制,怎么在WPS表格中绘制二次函数曲线图
- 大数据之Hadoop3.x 运行环境搭建(手把手搭建集群)
- 仙人球模型matlab,3dmax软件如何制作带刺的仙人球模型?
- ProcessStartInfo处理方法
- 十二月份地支藏干强度表
- 比尔总动员技师职业详解
- PV、EV、AC、BAC、EAC、ETC等计算公式含义
热门文章
- linux 命令缺失安装,Redhat7没有安装ifconfig命令的解决方法
- java Random类和Math.Rondom
- Beyond Compare 4 智能比较工具、Everything 文件/夹搜索工具,WinRAR,7-Zip 解压缩工具、diagrams 流程图工具
- c# 如何抓微信把柄_抓住把柄表情包 - 抓住把柄微信表情包 - 抓住把柄QQ表情包 - 发表情 fabiaoqing.com...
- 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_6 自定义类型转换器代码编写
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_6_函数式接口作为方法的返回值类...
- CentOS清除用户登录记录和命令历史方法
- IT部门域事件与业务分析
- 正确率、召回率和F值
- DDM:剪贴板处理处罚及截取屏幕