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\) 个就好了。
写一个主席树,二分查一下维护一下就好了。
一个细节是,我们左区间只会算长度是偶数的情况,要特别处理一下。