ZROI CSP-S失恋测(1)

传送门

写在前面:为了保护正睿题目版权,这里不放题面,只写题解。


“怎么大家一个暑假不见都变菜了啊。”——蔡老板


  • A

考虑一个(nk^2)的dp,按(w_i)排序,则每个组长只能匹配排在他前面的组员,每个组员也只能等待排在他后面的组长。

(f_{i,j,l})表示前(i)个人,配好了(j)对,有(k)个组员等待匹配的最优解,直接dp即可。

注意到(2k>n)时一定无解,因此(O(nk^2)=O(nkcdotmin(n,k))leq O(nksqrt{nk}))

另外一种做法是状态中不记录配好了多少对,而是直接wqs二分出每配成一对减免的补偿值,使得最优情况下恰好配成(k)对,时间复杂度(O(nklog a))

无论哪种方法都需要注意排序时((p_i=)2<3<1)(否则就会wa飞)


  • B

比较显然的一点是行和列是独立的。可以分别哈希出每行、列代表的字符,从而算出按照行、列划分时的答案,相乘即可。

由回文串的性质可以证明(猜出),([l,r])可能成为答案的充要条件是([1,r])([l,n])均能成为答案。两种是对称的,分别计算即可。

( ext{manacher})(二分哈希)算出以每个空隙为对称中心的最长回文串,假设已经算出(jin[1,i-1])的每一个([j,n])是否可行,([i,n])可行的充要条件是存在一个可行的([k,n])使得以((i-1,i))为对称中心的最长回文串可以覆盖到(k),显然这个(k)取合法的最大值最优。


  • C

两种部分分都很好做,维护一个懒标记即可。

考虑整体(+1)反映到二进制上的表现。设(x)的二进制位从低到高分别为(a_0,a_1,…,a_{29}),则(+1)后的表现为:找到最低的(i),使得(a_0,a_1,…,a_{i-1}=1,a_i=0),将(a_0,…,a_i)全部翻转。

如果将每个数倒着插入trie中(即从低位到高位插入),那么每次都是交换一条从根到叶子的链的每个节点的左右儿子,根据异或懒标记决定这条链的走向即可。

原文地址:https://www.cnblogs.com/suwakow/p/11442716.html