正题

题目链接:https://www.luogu.com.cn/problem/CF1286D


题目大意

nnn个粒子,第iii个在xix_ixi​,速度是viv_ivi​,有pi100\frac{p_i}{100}100pi​​的概率朝左飞,有1−pi1001-\frac{p_i}{100}1−100pi​​的概率往右飞,求期望第一对粒子碰撞的时间(如果永远没有碰撞则为000)

1≤n≤1051\leq n\leq 10^51≤n≤105


解题思路

期望+最小值显然是不能直接搞的,我们可以考虑枚举最小值,因为第一次碰撞的一定是相邻的粒子,所以这样的情况最多只有2n2n2n种。

然后对于一个值作为最小值的时候有些情况是不被允许的,设fi,0/1f_{i,0/1}fi,0/1​表示在被允许情况且iii向左/右的概率,此时每个转移可以写成一个2×22\times 22×2的矩阵,从大到小枚举最小值就可以每次只修改一个矩阵了,动态dpdpdp维护即可。

时间复杂度:O(23nlog⁡n)O(2^3n\log n)O(23nlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+10,M=2e6+10,S=2,P=998244353;
struct Matrix{ll a[S][S];
}c,f[N],w[N<<2];
struct node{ll op,w,x;double cw;
}d[N<<1];
ll ans,n,cnt,inv[M],x[N],v[N],p[N];
Matrix operator*(const Matrix &a,const Matrix &b){memset(c.a,0,sizeof(c.a));for(ll i=0;i<S;i++)for(ll j=0;j<S;j++)for(ll k=0;k<S;k++)(c.a[i][j]+=a.a[i][k]*b.a[k][j]%P)%=P;return c;
}
void Change(ll x,ll L,ll R,ll pos,const Matrix &val){if(L==R){w[x]=val;return;}ll mid=(L+R)>>1;if(pos<=mid)Change(x*2,L,mid,pos,val);else Change(x*2+1,mid+1,R,pos,val);w[x]=w[x*2]*w[x*2+1];return;
}
bool cmp(node x,node y)
{return x.cw>y.cw;}
signed main()
{inv[1]=1;for(ll i=2;i<=2e6;i++)inv[i]=P-inv[P%i]*(P/i)%P;scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld%lld%lld",&x[i],&v[i],&p[i]),p[i]=p[i]*inv[100]%P;for(ll i=1;i<n;i++)d[++cnt]=(node){0,(x[i+1]-x[i])*inv[v[i]+v[i+1]]%P,i+1,(double)(x[i+1]-x[i])/((double)(v[i]+v[i+1]))};f[1].a[0][1]=p[1];f[1].a[0][0]=P+1-p[1];Change(1,1,n,1,f[1]);for(ll i=1;i<n;i++){f[i+1].a[0][1]=p[i+1];if(v[i]>v[i+1])d[++cnt]=(node){1,(x[i+1]-x[i])*inv[v[i]-v[i+1]]%P,i+1,(double)(x[i+1]-x[i])/((double)(v[i]-v[i+1]))};else f[i+1].a[1][1]=p[i+1];if(v[i]<v[i+1])d[++cnt]=(node){-1,(x[i+1]-x[i])*inv[v[i+1]-v[i]]%P,i+1,(double)(x[i+1]-x[i])/((double)(v[i+1]-v[i]))};else f[i+1].a[0][0]=P+1-p[i+1];Change(1,1,n,i+1,f[i+1]);}sort(d+1,d+1+cnt,cmp);ll last=(w[1].a[0][0]+w[1].a[0][1])%P;for(ll i=1;i<=cnt;i++){ll x=d[i].x;if(d[i].op==0)f[x].a[1][0]=P+1-p[x];else if(d[i].op==1)f[x].a[1][1]=p[x];else f[x].a[0][0]=P+1-p[x];Change(1,1,n,x,f[x]);(ans+=(w[1].a[0][0]+w[1].a[0][1]-last+P)%P*d[i].w%P)%=P;last=(w[1].a[0][0]+w[1].a[0][1])%P;}printf("%lld\n",ans);return 0;
}

CF1286D-LCC【动态dp,数学期望】相关推荐

  1. 聪聪和可可(记忆化dp+数学期望)

    emmmm 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下 ...

  2. bzoj1415 [Noi2005]聪聪和可可【概率dp 数学期望】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1415 noip2016 D1T3,多么痛的领悟...看来要恶补一下与期望相关的东西了. 这是 ...

  3. CF1153F-Serval and Bonus Problem【dp,数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/CF1153F 题目大意 在有nnn个区间的左右端点在[0,l)[0,l)[0,l)范围内随机,求被至少kkk个区间覆 ...

  4. CF1556F-Sports Betting【状压dp,数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/CF1556F 题目大意 nnn个点的一张竞赛图,每个点有一个权值aia_iai​,(i,j)(i,j)(i,j)之间 ...

  5. P3343-[ZJOI2015]地震后的幻想乡【dp,数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/P3343 题目大意 给出nnn个点的一张无向图,每条边被修复的时间是[0,1][0,1][0,1]的一个随机实数,求 ...

  6. P4707-重返现世【dp,数学期望,扩展min-max容斥】

    正题 题目链接:https://www.luogu.com.cn/problem/P4707 题目大意 nnn个物品,每次生成一种物品,第iii个被生成的概率是pim\frac{p_i}{m}mpi​ ...

  7. P4321-随机漫游【状压dp,数学期望,高斯消元】

    正题 题目链接:https://www.luogu.com.cn/problem/P4321 题目大意 给出nnn个点mmm条边的一张无向图,qqq次询问. 每次询问给出一个点集和一个起点,求从起点出 ...

  8. P3600-随机数生成器【dp,数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/P3600 题目大意 nnn个数的序列,每个数是[1..x][1..x][1..x]中的一个,有qqq个区间[l..r ...

  9. 数学期望和概率DP题目泛做(为了对应AD的课件)

    题1: Uva 1636 Headshot 题目大意: 给出一个000111序列,注意实际上是环状的.问是0出现的概率大,还是当前是0,下一个还是0的概率大. 问题比较简单,注意比较大小: A/C & ...

最新文章

  1. hibernate动态表名映射
  2. java基本语文档_Java 文档注释
  3. java反射对象赋值_Java反射详解
  4. c# 获取excel单元格公式结果_EXCEL公式解析:单元格中数字去重排序思路及公式详解...
  5. 目录_视觉SLAM十四讲_0
  6. Android -很全的android操作内容丰富
  7. 海思Hi3559AV100ES Camera芯片处理器参数
  8. python生成可执行exe控制Microsip自动填写号码并拨打
  9. 无感支付及相应技术规范
  10. creo扫描选择多条链作为轨迹_Proe/Creo曲面造型·蓝牙耳机纹理曲面纹理
  11. 秘密行动倒计时丨DC86021行动指挥部致全体极客伙伴的一封密信
  12. AutoCAD_FILEDIA
  13. Vulkan教程 - 01 环境搭建
  14. docker-compose开机自启动设置
  15. Android NFC基础
  16. build vue 指定版本_vue buid及部署踩坑记录
  17. 美国访问学者签证材料清单
  18. shell pwd 和 dirname 讲解
  19. 【思维导图软件哪个好】万彩脑图大师教程 | 编辑思维导图背景
  20. 【TypeScript】TS基础

热门文章

  1. c语言扑克牌随机发三张牌,扑克牌发三张概率组合一副扑克牌52张(不含大、小王),发三张牌,一共多少种组合.另外:1)三张中含一对的组合有多少张?(...
  2. 超详细图解!【MySQL进阶篇】SQL优化-索引-存储引擎
  3. tcl mysql_MySQL·TCL语言
  4. memcached mysql缓存_memcached做数据库缓存
  5. 移动端h5唤起键盘_移动端H5界面打开后,如何自动调用软键盘
  6. 32位mysql安装包_MySQL安装指南(CPT103)
  7. 单片微型计算机系统应用和开发特点,单片微机原理与应用(第2版)
  8. 一个div 上下两行_Django 实战 | 搭一个 GitHub 用户展示网站 02
  9. 机器学习之数据预处理——特征编码(标签编码,独热编码)
  10. C++ 带默认参数值的函数