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

A. Colorado Potato Beetle

暴力做法是直接bfs。

优化的方法是离散化。

将特殊的点的横纵坐标抽出来,然后用这些横纵坐标为1e12*1e12分成一个个块,容易发现每个块内的状态是一致的。

然后用与暴力类似的方法即可,注意最后统计的是每个块的实际大小。

 

B. Distinct Paths

观察可知数据范围欺骗了你。

似乎剪枝(注意去重复状态)的搜索就能过。

一个更合理的做法是因为行是单调不降的,状压每个颜色的最早出现的列就好了。

但是还是需要一些玄学剪枝。

 

C. 回忆树

容易发现问题可以转化为三部分累计答案。

u->lca,跨过lca,lca->v。

其中跨过lca的贡献比较容易维护,因为询问串总数不大,只要将跨过lca的串提出来,单独用kmp统计即可。

考虑如何维护lca->v,把询问串放到sam上跑,我们关心的是lca->v这条链上(要扣掉最上面一部分)的endpos集合大小。

显然使用广义后缀自动机就好了。

因为关注一条链上的endpos集合大小,使用线段树合并。

但是一条链上的区间不是连续的,所以使用重链剖分。(也可以用另一种方法直接树上前缀和)

还有一个问题是u->lca,这里直接用广义后缀自动机不行了。

但是显然将询问串翻转一下,问题就和lca->v一样了。

全部评论

相关推荐

03-05 17:03
已编辑
浙江工商大学 C++
陈好好wy:整体看下来有点空空的感觉,可以把每一段项目经历都再完善一下,然后用小标题的形式写个两到三条,目前看有点太简单了,不太能看出具体在这个项目里做了什么工作。还是要尽量把自己做的工作以量化的形式体现在简历上呢。
双非本科求职如何逆袭
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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