<span>省选模拟46 题解</span>

A. 俄罗斯方块

一道很神奇的 bitset 题。

考虑维护每个格子最上面属于哪个块,这个东西可以用一个 set 来维护每个连续段,操作方法类似珂朵莉树。

对于每次操作,直接用 set 遍历每个有交的连续段,询问并取 $\max$,以得到当前的高度,然后进行覆盖操作。

所以现在的问题是,有一个块 $b$ ,起点为 $s_b$,一个块 $a$,起点为 $s_a$,问落下后的高度。

容易发现并不关注具体的 $s_a,s_b$ ,只关注 $s_a-s_b$。

然后考虑一个暴力做法,枚举答案,然后类似卷积的再枚举每一层,bitset 判断是否有交。

同时,对已经计算过的三元组 $(id_a,id_b,s_a-s_b)$ 进行记忆化操作。

这样的话总复杂度不超过 $O(\frac{S^2}{64})$ ,其中 $S$ 表示总面积,因为每个点对显然只被计算了一次。

但是有个小问题,当块 $a$ 或块 $b$ 的宽度小于 $64$,导致这个 $64$ 除不掉了,所以暴力计算。


B. 能力强化

与 uoj 喂鸽子很像。

大概的思想是,将全部覆盖通过 $Min-Max$ 容斥转化为覆盖一个。

然后发现每个物品是一样的,所以只考虑覆盖的个数乘上组合数即可。

这样的话可以设 $g_{i,x}$ 表示前 $i$ 个物品,用了 $j$ 步,然后一个都没覆盖成功的方案数。

$g$ 数组的求法先 dp,然后用一个简单的 $EGF$ 就可以了。

有了 $g$ 数组,可以通过枚举第 $i+1$ 个物品用了多少步填满,计算 $i+1$ 个元素中覆盖了一个的期望。

 

C. 将军棋

毒瘤提答题。

全部评论

相关推荐

头像
11-26 14:50
门头沟学院 C++
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
赛博小保安:你这简历没啥大问题的,经历技能也足够了,问题应该就是出在出身了,学院本就是这样,HR忙着跟92的勾搭呢,哪有心思看我们这些双非😿😭
点赞 评论 收藏
分享
hwwhwh:同双非,有大厂实习其实也没啥用,主要看运气,等就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务