当前位置: 首页 > news >正文

「LG3600-随机数生成器」题解

P3600 随机数生成器

sol

期望不太方便,转计数。那么就是要求对每个值,最后结果恰为这个值的方案数。

恰好不太好求,考虑差分,转化为至多,那么就是要对每个值求答案不超过这个值的方案数。

要求所有区间区间内最小值的最大值不超过标准值,也就是要求每个区间都得有一个不超过标准值的数。容易将原序列转化为 0-1 序列,再转化为线段覆盖问题:要求放一些点点,使得每个给出的区间内都包含有一个点。求放点方案数。

首先不难发现不存在包含关系的区间,因为小区间满足大区间必然满足。那么现在区间右端点关于左端点不降。

考虑 DP 求这个,设计 \(f(i,j)\) 表示前 \(i\) 个点共选了 \(j\) 个点且钦定选第 \(i\) 个点使得所有左端点不超过 \(i\) 的区间均满足性质的方案数。转移考虑枚举上一个合法点的位置,那么简单预处理出覆盖各个点的最左的区间与最右的区间,则上一个合法点必须位于当前点前最后一个不被当前点覆盖的区间内。这个显然可以简单前缀和优化。

求出 \(f\) 之后找方案数是简单的,枚举标准值 \(v\) 与总放点数 \(i\),有系数 \(i^v(n-i)^{x-v}\),意义显然。最后枚举答案差分得到方案并除总方案数得到期望即可。

code

const int N=2005;int n,x,q,m;
struct node{int l,r;}ns[N],ls[N];
int lb[N],rb[N];int dtl[N<<2],dtr[N<<2],lzl[N<<2],lzr[N<<2];
void build(int x=1,int l=1,int r=n){dtl[x]=lzl[x]=inf;dtr[x]=lzr[x]=-inf;if(l==r)return;int m=l+r>>1;build(x<<1,l,m);build(x<<1|1,m+1,r);
}
void pushdown(int x){chmin(dtl[x<<1],lzl[x]);chmin(dtl[x<<1|1],lzl[x]);chmin(lzl[x<<1],lzl[x]);chmin(lzl[x<<1|1],lzl[x]);chmax(dtr[x<<1],lzr[x]);chmax(dtr[x<<1|1],lzr[x]);chmax(lzr[x<<1],lzr[x]);chmax(lzr[x<<1|1],lzr[x]);lzl[x]=inf,lzr[x]=-inf;
}
void modify(int lq,int rq,int v,int x=1,int l=1,int r=n){if(lq<=l&&r<=rq)return chmin(dtl[x],v),chmin(lzl[x],v),chmax(dtr[x],v),chmax(lzr[x],v),void();int m=l+r>>1;pushdown(x);if(lq<=m)modify(lq,rq,v,x<<1,l,m);if(m<rq)modify(lq,rq,v,x<<1|1,m+1,r);
}
pii query(int k,int x=1,int l=1,int r=n){if(l==r)return {dtl[x],dtr[x]};int m=l+r>>1;pushdown(x);if(k<=m)return query(k,x<<1,l,m);else return query(k,x<<1|1,m+1,r);
}mint f[N][N],s[N][N];
mint g[N],ans;inline void Main(){cin>>n>>x>>q;rep(i,1,q)cin>>ns[i].l>>ns[i].r;sort(ns+1,ns+1+q,[&](node a,node b){if(a.l!=b.l)return a.l<b.l;return a.r<b.r;});int mx=inf;per(i,q,1)if(ns[i].r<mx)mx=ns[i].r,ls[++m]=ns[i];reverse(ls+1,ls+1+m);build();rep(i,1,m)modify(ls[i].l,ls[i].r,i);rep(i,1,n){pii res=query(i);if(res.fir!=inf)lb[i]=res.fir,rb[i]=res.sec;else rb[i]=rb[i-1],lb[i]=rb[i]+1;}f[0][0]=s[0][0]=1;rep(i,1,n)s[i][0]+=s[i-1][0];rep(j,1,n){rep(i,j,n){f[i][j]=s[i-1][j-1]-(ls[lb[i]-1].l-1<0?0:s[ls[lb[i]-1].l-1][j-1]);s[i][j]+=f[i][j];}rep(i,1,n)s[i][j]+=s[i-1][j];}rep(v,1,x)rep(i,1,n)g[v]+=(s[n][i]-s[ls[m].l-1][i])*qpow(v,i)*qpow(x-v,n-i);rep(v,1,x)ans+=v*(g[v]-g[v-1]);put(ans/qpow(x,n));
}
http://www.hn-smt.com/news/302/

相关文章:

  • MathType7下载包安装教程2025最新下载+安装+汉化激活(附安装包,超详细)
  • 2025强网杯ezphp复现
  • 漏洞报告被拒绝的常见原因及避免方法
  • 【IEEE出版 | 重庆邮电大学主办 | 多届次、高层次】第六届人工智能与计算机工程国际学术会议(ICAICE 2025)
  • Docker容器里面部署的Jenkins的Java17升级到21版本(无需删除之前容器,内部在线升级) - 攻城狮
  • 报表知识
  • 渐进过程中大O与小o混用
  • 消息队列的有序性
  • 【LTDC】DMA2D —— 嵌入式系统的 GPU
  • unity管理器设计:Manager of Managers
  • iview table 排序 columns 里面写 sortable: custom 不要写 sortable: true 不然会进行二次内部排序序号等 字段。
  • 本地运行nginx服务,模拟线上环境访问项目
  • git提交远程项目步骤
  • 2025 年搅拌器搅拌设备,侧入式搅拌设备,斜插式揽拌设备,卧式搅拌设备厂家最新推荐,聚焦资质、案例、售后的五家企业深度解读
  • 2025 年环保搅拌设备,搅拌装置设备,框式搅拌设备厂家最新推荐,实力品牌深度解析采购无忧之选!
  • CorelDRAW的shell扩展ShellXP.dll导致资源管理器explorer.exe卡死/冻结/无响应/挂起
  • 2025 年定制矿车,大型矿车,固定式矿车厂家最新推荐,产能、专利、环保三维数据透视
  • 醒图电脑版下载与安装教程(2025最新版)
  • 2025 年江苏电缆附件,热缩电缆附件,冷缩电缆附件,预制电缆附件厂家最新推荐,产能、专利、环保三维数据透视
  • Android Studio 使用glibc2.28的版本
  • 2025年10月兰花油品牌推荐榜:五款精华油深度对比与选购指南
  • 2025年浅拾兰花双萃致臻精华油:从成分与技术维度解析其护肤功效
  • 2025 年进口螺杆泵,萨伯特螺杆泵,污泥螺杆泵厂家最新推荐,实力品牌深度解析采购无忧之选!
  • 为什么 AI 模型的最小理解单位是「特征」?
  • 2025年移动车载变电站厂家最新推荐榜:陕西四方华能凭硬实力成优选
  • XiaoQuQu 的 2025 CSP-S 第二轮模拟 ROUND2
  • 2025年硬密封闸阀厂家权威推荐榜单:手动闸阀/明杆闸阀/法兰闸阀源头厂家精选
  • 深入解析:ArcGIS Manager Server Add Host页面报错 HTTP Status 500
  • 2025修护洗/二硫化硒去屑/香氛/控油蓬松/洗发水品牌推荐:MASIL玛丝兰引领功效细分赛道,哪个牌子好?看实测口碑榜
  • AOP面向切面编程思想