UOJ NOI Round #6 Day1

面基之路

问题等价于,所有人走到一个定点的用时,因为相遇后可以一起走。

然后枚举每条边 (u,v) ,把每个人到 \(u\) 的时间排序,那么到 \(u\) 点的一定是一个前缀。

答案只取决于到 \(u,v\) 的最大时间。算一下就好了。

机器人表演

一共有 \(n + 2 * t\) 个位置,我们不妨依次确定每一个位置。

我们把我们填的串尽可能和原串匹配,失配后再用插入。

于是我们记录用了多少位数,以及原串配到什么位置,插入了几个 0 就好。

发现死掉了,答案算小了。

考虑为什么,有可能在一个时刻,我们的 1 插入量高于了 0 插入量,我们可以采取反悔匹配的方式使得他仍然合法,但我们原来的 dp 方式无法算到这种情况。

那在转移中考虑进去这种状况就好了。

稳健型选手

考虑两个贪心。

一个从左往右,每次选取两个数,删去选择的数中最小的。如果最后剩一个数就直接选了。

另一个从右往左,每次将两个数加入不选集合中,然后从不选集合中挑出最大的选一下。

然后考虑分治,发现分治过程中需要合并,\([ql , mid]\)\([mid + 1 , qr]\) 两个区间。

左边维护选了哪些,右边维护哪些没选,我们需要在左边删 \(k\) 个,右边加 \(k\) 个就好了。

写一个主席树,二分查一下维护一下就好了。

一个细节是,我们左区间只会算长度是偶数的情况,要特别处理一下。

posted @ 2022-08-10 11:02  Reanap  阅读(41)  评论(0编辑  收藏  举报