Good Bye 2024 终究是败了

写个题解。以后看一次后悔一次。

Tender Carpenter

不难发现,每个数单独一段一定是可行的。因为能够组成等边三角形。那么问题就变成了,能否分出一段长度不小于 2 的区间,使得其合法。显然的,[l,r] 的可行性不大于 [l+1,r] 的可行性。那么枚举 l=i,r=i+1 判断是否合法即可。

Outstanding Impressionist

当一个区间 i 不是特殊的,当且仅当对于每个 lijri,存在 lk=rk=j。然后直接判断即可。

Bewitching Stargazer

不难发现答案可以直接计算其中一半,然后递归下去。复杂度 O(logn) 的。

Refined Product Optimality

答案显然是排序之后的 min(ai,bi)。那么对于修改 ai,如果 ai+1 后仍不大于第一个比 ai 大的数,那么 ai 对应的 bi 不变。如果大于,相当于是将 aj=ai 的整体左移一位,然后空出来的一位匹配 ai。修改 bi 同理。这样不难发现每次修改只会最多影响到 2 组映射,直接维护即可。

Resourceful Caterpillar Sequence

注意到情况只有 2 种。第一种是 q 一开始就在叶子节点;第二种是对于 p 移动一步之后的所有情况,p 距离最近的叶子节点距离都是 1。情况 1 证明显然,情况 2 若存在移动一步之后 p 无法直接移动到叶子节点,那么他们就可以无限拉扯,直到平局。

计算情况 1 简单。对于情况 2,可以考虑枚举 q 随着 p 移动一步之后的位置 x,那么 x 需要有一个出边连向叶子节点。同时,当 dx3 时,我们就可以把 q 放在其中一个子树里,p 放在另一个子树里。有个显然的事情,p 只能往深度大的点走,所以这样 q 一定能走到 x。那么 p 应该为所有距离最近叶子节点长度不小于 2 的点。而对于每个 q,都能对应到所有的 p。也就是说,对于一个 x,其贡献应该是 cx×cnt。其中 cxx 出边不为叶子节点的数量,cntp 的数量。这个可以直接预处理 cnt,暴力枚举 x

Earnest Matrix Complement

首先有性质:每一行的 1 变成的数一定相同。证明简单。

定义状态函数 fi,j 表示前 i 行,第 i 行的 1j 的数量。记 ci 为第 i1 的数量,di,j 为第 ij 的数量。那么有转移方程:fi,j=max(fi1,w+ci1×di,w+ci×di1,j,fi1,j+ci×ci1+ci1×di,j+ci×di1,j)。然后再加上一个定值,即 j=1ki=1n1di,j×di+1,j。如果我们改变一下转移形式,可以得到:fi,j=max(mx,fi1,j+ci1×ci)+ci×(di1,j+di+1,j)。其中 mx=maxj=1kfi1,j。不难发现,di1,j+di+1,j1j 数量为 O(m) 个。那么去掉后面的部分后就是一个整体加 x,整体取 max。后面部分暴力更新单次是 O(m) 次的。直接线段树维护的时间复杂度 O(nmlognm)

posted @   harmis_yz  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示