atc 板刷计划

ARC213A

题目
中文题目
肯定是 \(dp\),设 \(dp[i]\) 表示在第 \(i\) 个排列处获得奖励时, \(1\)\(i\) 最多可获得奖励之和。
转移是 \(dp[i]=max_{p_j可在 i-j步内变到 p_i}\{dp[j]\}+c_i\)
可以注意到 \(L\) 非常小,并且该题的操作为相邻位交换代表着两个排列的最大距离为 \(\frac{L(L-1)}{2}\)(最大也就 \(36\))。所以我们在转移时,对 \(i-36\) 及之前的 \(j\) 我们知道其必然可 \(p_j\rightarrow p_i\),那么用一个变量记一下这些 \(dp[j]\) 的最大值,再对 \(i-35\)\(i-1\) 范围内的 \(j\) 暴力转移一下就可以。
code

ARC213B

题目
题目大意: 定义集合 \(S\) 满足集合内任意两个数 \(x\)\(y\) 都满足 \(popcount(x\oplus y)\geq2\)。给定 \(L\),\(R\),求由 \([L,R]\) 范围内的所有数能组成的最大集合 \(S\)


之前一直在想把把所有满足 \(popcount(x\oplus y)\geq2\)\(x\)\(y\) 连边,但是发现这种连边方式没有传递性,即 \(x-y-z\) 不代表 \(x-z\)(但我一直以为是有传递性的所以一直 WA)。

所以考虑直接把 \(popcount(x\oplus y)=1\)\(x,y\) 连边,虽然还是没有传递性但是我们可以发现这有个很好的性质(估计是不 oi 太久了怎么这都忘了):连出来的图是二分图,而我们所要求的 \(S\) 最大 \(size\) 就是这张二分图的最大独立子集。

二分图最大独立集等于点数减去最大匹配

所以转换成求这个二分图的最大匹配。
可以注意到所有 \(2i\)\(2i+1\) 之间都是有连边的。所以只要 \(L\) 为偶数,那么最大匹配数就等于 \(\lfloor\frac{R-L+1}{2}\rfloor\)
同时,当 \(L,R\) 同时为奇数时,区间长度即 \(R-L+1\) 为偶数,所以答案必为 \(\frac{R-L+1}{2}\),证明可见 link
所以现在只需考虑 \(L\) 为奇数,\(R\) 为偶数的情况。
首先,\([L+1,R-1]\) 必然可以相邻两两配对。
然后,既然是一张二分图,由匈牙利算法可知,只需找到 \(L\rightarrow R\) 的一条增广路即可最大匹配数 \(+1\)
因为图中每走一条边,\(popcount\) 就会加减 \(1\),所以,如果 \(L,R\)\(popcount\) 奇偶性相等,那么就不存在增广路。
如果 \(L,R\)\(popcount\) 奇偶性不相等,我们考虑构造一条增广路:
先找到 \(x,y\) 二进制下从高位到低位第一个不相等的位置,记为第 \(k\) 位,若存在 \(u\) 使得 \(L\leq u\)\(u+2^k\leq R\)\(L+2^k\leq R\),那么就一定存在一条增广路。记 \(u\)\(\overline{x0y}\),构造出来是 \(L\rightarrow \overline{x011...1}\rightarrow \overline{x0y}\rightarrow\overline{x1y}\rightarrow\overline{x100...0}\rightarrow R\)
(因为走一条边的效果相当于在二进制表示下将某一位翻转)

posted @ 2026-01-30 22:44  Thyme_qwq  阅读(4)  评论(0)    收藏  举报