news 2026/7/14 23:30:41

洛谷 P9100 [PA 2020] Miny 题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷 P9100 [PA 2020] Miny 题解

这道题难点在于状态设计。考虑线性 DP,设d p i dp_idpi为仅考虑前i ii个地雷且钦定第i ii个不引爆的方案数。这样设计的好处在于i ii前面的地雷一定不会引爆i ii后面的,从而满足无后效性。

注意需要在左右无穷远处各添加一个爆炸半径无穷大的哨兵地雷,下标分别为0 00n + 1 n+1n+1,确保哨兵能引爆所有地雷。答案即为d p n + 1 dp_{n+1}dpn+1

然后考虑转移。对于每个i ii,枚举所有j < i j<ij<i,然后判断引爆[ j + 1 , i − 1 ] [j+1,i-1][j+1,i1]中所有地雷是否会引爆i iij jj。若均不会则能转移,令d p i ← d p i + d p j dp_i\leftarrow dp_i+dp_jdpidpi+dpj

尝试转化这个条件。设l i l_ilii ii左边第一个会引爆i ii的地雷,r i r_iri同理。则上述条件等价于j ≥ l i j\ge l_ijlii ≤ r j i\le r_jirj

l , r l,rl,r两个数组都可以单调栈上二分处理。

然后状态转移方程如下。
d p i = ∑ j = l i i − 1 [ i ≤ r j ] ⋅ d p j = ∑ j = 0 i − 1 [ i ≤ r j ] ⋅ d p j − ∑ j = 0 l i − 1 [ i ≤ r j ] ⋅ d p j \begin{aligned} dp_i&=\sum_{j=l_i}^{i-1}[i\le r_j]\cdot dp_j\\ &=\sum_{j=0}^{i-1}[i\le r_j]\cdot dp_j-\sum_{j=0}^{l_i-1}[i\le r_j]\cdot dp_j\\ \end{aligned}dpi=j=lii1[irj]dpj=j=0i1[irj]dpjj=0li1[irj]dpj

先离线,把d p i dp_idpi的两个询问分别挂在i − 1 i-1i1l i − 1 l_i-1li1上,然后树状数组扫一遍即可。需要特殊处理j = 0 j=0j=0的情况。

时间复杂度O ( n log ⁡ n ) O(n\log n)O(nlogn)

#include<bits/stdc++.h>#definerept(i,a,b)for(inti(a);i<=b;++i)#definepert(i,a,b)for(inti(a);i>=b;--i)#definelowbit(x)((x)&-(x))#defineebemplace_back#defineintlonglongusingnamespacestd;constexprintN=3e5+5,P=1e9+7,INF=3e18;structitem{intp,rad,lb,rb;}a[N];structquery{query()=default;query(int_id,int_k):id(_id),k(_k){}intid,k;};intdp[N],st[N],l[N],r[N],s[N],n,top;vector<query>q[N];voidadd(intp,intx){while(p<=n+1)s[p]+=x,p+=lowbit(p);}intask(intp){intres=0;while(p)res+=s[p],p^=lowbit(p);returnres;}signedmain(){cin.tie(0)->sync_with_stdio(0);cin>>n;a[0]={-INF,INF,-INF,INF};a[n+1]={INF,INF,-INF,INF};r[0]=r[n+1]=n+1;dp[0]=1;rept(i,1,n){cin>>a[i].p>>a[i].rad;a[i].lb=a[i].p-a[i].rad;a[i].rb=a[i].p+a[i].rad;}st[top=1]=0;rept(i,1,n){intL=1,R=top,mid;while(L<R){mid=L+R+1>>1;a[st[mid]].rb>=a[i].p?L=mid:R=mid-1;}l[i]=st[L];while(a[st[top]].rb<a[i].rb)--top;st[++top]=i;}st[top=1]=n+1;pert(i,n,1){intL=1,R=top,mid;while(L<R){mid=L+R+1>>1;a[st[mid]].lb<=a[i].p?L=mid:R=mid-1;}r[i]=st[L];while(a[st[top]].lb>a[i].lb)--top;st[++top]=i;}rept(i,1,n+1){if(!l[i])++l[i],++dp[i];// 特判从dp[0]转移if(l[i]>1)q[l[i]-1].eb(i,-1);if(i>1)q[i-1].eb(i,1);}rept(i,1,n+1){add(r[i],dp[i]);for(auto[id,k]:q[i]){(dp[id]+=k*(ask(n+1)-ask(id-1)))%=P;}}cout<<(dp[n+1]+P)%P;return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 19:30:55

CGO调用OpenCV实现多角度模板匹配性能分析

在计算机视觉领域&#xff0c;模板匹配作为基础实用的图像处理技术&#xff0c;历经传统方法到深度学习方法的迭代。据国际计算机视觉与模式识别会议&#xff08;CVPR&#xff09;2023年技术趋势报告&#xff0c;传统模板匹配在现代工业视觉检测中仍占38%应用份额&#xff0c;尤…

作者头像 李华
网站建设 2026/7/13 17:47:42

Zookeeper在大数据实时报表系统中的应用

Zookeeper在大数据实时报表系统中的应用 关键词&#xff1a;Zookeeper、大数据、实时报表系统、分布式协调、一致性协议、分布式锁、元数据管理 摘要&#xff1a;本文深入探讨Zookeeper在大数据实时报表系统中的核心应用场景&#xff0c;包括分布式协调、配置管理、集群节点管理…

作者头像 李华
网站建设 2026/7/13 1:44:03

干瞪眼游戏胜率较高的玩法分析

### **干瞪眼游戏胜率较高的玩法分析**在干瞪眼游戏中&#xff0c;玩家需要通过合理出牌、灵活运用牌型和策略性保留关键牌来提高胜率。以下是胜率较高的玩法策略&#xff1a;---#### **1. ** **炸弹的灵活运用** - **核心作用**&#xff1a;炸弹&#xff08;四张相同牌&#x…

作者头像 李华
网站建设 2026/7/13 19:58:27

救命神器10个AI论文平台,专科生毕业论文救星!

救命神器10个AI论文平台&#xff0c;专科生毕业论文救星&#xff01; AI工具助力论文写作&#xff0c;专科生也能轻松应对 随着人工智能技术的不断发展&#xff0c;AI工具已经逐渐成为学术写作中不可或缺的助手。对于许多专科生来说&#xff0c;撰写毕业论文是一项既复杂又耗…

作者头像 李华
网站建设 2026/7/13 21:12:36

从高AI率到轻松通过:5款降重神器详细教程,有效降低AI疑似率!

交论文前最怕什么&#xff1f;肯定不是内容深度不够&#xff0c;而是辛辛苦苦用AI辅助完成的稿件&#xff0c;查重的时候却被标出一片红&#xff0c;AIGC率直接爆表&#xff1f;&#xff01;看着电脑上超高的“AIGC疑似率”真是不知所措&#xff0c;于是开始手动降AI&#xff0…

作者头像 李华