11.3 模拟赛

T1:

原题链接

T2:

原题链接

不难发现,设最终每段黑白比值为 C,则 WB=C,我们可以直接算出每段的黑白格子比值为多少。

接下来考虑如何让划分区间最多:

  • 结论: 一定是恰好满足 WB=C 的最小的区间。

  • 证明:[1,x],[1,y] 区间均满足条件,且 x<y,发现 W1,xB1,x=W1,yB1,y=Wx+1,yBx+1,y,所以选 [1,y] 不如选 [1,x],[x+1,y],能产生更多贡献。

接下来模拟上述贪心过程即可。

T3:

原题链接

棋盘上放置方案问题,很容易想到动态规划求解,观察数据范围,无法状态压缩。

但再观察,发现某一列上最多只能放两个棋子,某一行也同理,所以我们可以这样设计状态:令 fi,j,k 表示前 i 行,有 j 列放了一个棋子,k 列放了两个棋子的方案数。

转移时枚举第 i 行放了多少棋子:

  • 不放棋子,直接从上一行状态转移来:fi,j,k=fi1,j,k

  • 放一枚棋子,它可以放到之前没有棋子的和有一枚棋子的列:fi,j,k={fi1,j1,k×(m(j1)k)fi1,j+1,k1×(j+1)

  • 放两枚棋子,可以都放到没棋子的列,都放到放一枚棋子的列,以及分别放没棋子和有一枚棋子的列。
    转移方程为:fi,j,k={fi1,j2,k×Cm(j2)k2fi1,j+2,k2×Cj+22fi1,j,k1×j×(mj(k1))

最后答案为 j=0mk=0mfn,j,k

T4:

原题链接

可以暴力枚举 a,b,然后 c[2ba,n],找区间最大值即可。

对于我们选择的 a,b 间,若能在 (a,b) 中找到某个下标 i,满足 hihahihb,那么选择 i 是更优的。

理由很简单,无论是从 ai 还是从 bi,都会扩大 c 的选择区间,同时还能增大你的 ha+hb

所以我们只找满足以下条件的 a,b

  • [a,b] 中最大值 <min{ha,hb}

这不就是找到一个数,它左右两边的最近的大于等于它的数吗。直接单调栈求出,并且这样的数对是 O(n) 级别的。

然后我们把询问离线下来,从大到小枚举左端点进行扫描线,对于新的左端点 i,先把预处理来的数对 (a,b),a=i 对答案进行更新。

如何维护答案?考虑线段树,设 Bi 表示如果选 i 作为 c,它左边的最大的 ha+hb,对于新来的数对 (a,b),将 [2ba,n] 中的 Biha+hbmax,这个用线段树很好维护。

对于左端点为 i 的所有询问,查询区间 [i+2,r]Bi+hi 的最大值。

所以线段树维护 hi,Bi+hi 的最大值,支持与某个数取 max 操作,这道题就做完了。

时间复杂度 O((n+q)logn)

posted @   summ1t  阅读(11)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示