2.14 Luminous Memory ——ARC125~127
今天是情人节。所以我想把今天的冠名留给最可爱的白洲梓酱。也祝各位小情侣节日快乐捏!
ARC125
ARC125D Unique Subsequence
首先我们发现对于不符合的情况,一定存在一处 x->y->z 满足存在 y0 使得 x->y0->z 且 \(a_y=a_{y_0}\)。于是我们只需要避免这种情况就行。考虑 DP。然后令 \(t_i\) 表示 \(a_i\) 上一次出现位置,那么 \(f_i\) 可以从满足 \(j\ge t_i\) 且 \(t_{a_j}=j\) 的位置转移过来。用一个 BIT 维护转移即可。
ARC125E Snack
这种很流的问题,可以转化为最小割之后再贪心。
考虑直接建二分图网络流模型,然后转化为最小割。枚举有多少个 snack 与汇直接相连,设其为 \(x\),那么此时的最小割即最小的 \(n-x\) 个 \(a_i\) 之和,再加上 \(\sum_i \min(c_i,b_ix)\)。这个就很容易求解了。
ARC125F Tree Degree Subset Sum
首先考虑树的 deg 有什么性质:\(\sum d=O(n)\),且 \(1\) 的个数 \(\ge \max d_i\)。根据前面一个性质得知不同的 \(d\) 有 \(O(\sqrt n)\) 种。这种问个数的问题不是很好处理,所以找是否存在一些连续性。根据后面那个性质,我们可以发现取 \(d'_i=d_i-1\) 那么对于每一种 \(\sum d\),合法的 \(x\) (子集大小)连续。于是我们就 DP 这个 \(x\) 的最大与最小值,用多重背包的单调队列优化即可 \(O(n\sqrt n)\)。
ARC126
ARC126D Pure Straight
考虑状压 DP。\(f_{i,s}\) 表示考虑 \([1,i]\),拼凑出集合 \(s\) 且 \(s\) 内有序,并且考虑到后续 \(U\setminus s\) 的贡献的方案数。那么 \(f_{i-1,s}+\min(|s|,k-|s|)\to f_{i,s}\),并且预处理出 \(p_{s,i}\) 表示 \(i\) 在 \(t\) 中的 rank,那么有 \(f_{i-1,s\setminus \{a_i\}}+|s|-p_{s,a_i}\to f_{i,s}\)。
ARC126E Infinite Operations
通过模拟十几个样例发现答案就是 \(\frac{1}{2}\sum_{a_i<a_j} a_j-a_i\)。于是用平衡树维护序列即可。
F 是一个比较抽象的数学题。就不做了。
ARC127
ARC127D Sum of Min of Xor
考虑从高位往低位。令 \(W(h,S,T)\) 表示处理目前位为 \(h\),求解 \(a_{x \in S}\oplus a_{y\in T}\),且比 \(h\) 高的位满足 \(a_x\oplus a_y=b_x\oplus b_y\)。于是我们按位考虑。令 \(S_0\) 表示 \(a_{x,h}=b_{x,h}\) 的集合,\(S_1,T_0,T_1\) 同理。那么对于 \(S_0\oplus T_0\) 和 \(S_1\oplus T_1\) 的贡献,我们递归下去(\(W(h-1,S_i,T_i)\)),而对于 \(S_{0}\oplus T_{1}\) 与 \(S_1\oplus T_0\),应该取 \(a\) 还是 \(b\) 已经确定了,直接计算答案。仔细分析一下可知总复杂度为 \(O(nw)\)。
ARC127E Priority Queue
考虑我们在确定了最终状态后如何贪心确定 push 的顺序。容易发现我们一定是从小往大 push,于是 push 和 pop 操作应该会形成一些括号匹配。于是我们就能知道每个 pop 操作 pop 出的值的上限,设为 \(b\)。于是我们将 \(b\) 排序之后,\(f(i,j)\) 表示考虑 \([1,i]\) 中有 \(j\) 个数被 pop 了。转移是容易的。
ARC127F ±AB
本篇最厉害的题。首先如果 \(a+b\le m+1\) 那么的确啥都可以取。所以只需要考虑 \(a+b>m+1\) 的情况。然后我们发现在这种情况下,我们第一次操作完,每次只有一种操作。即如果第一次取 +a 或 -b(两种不可能同时能操作),那么第二次就只能取 -b 或者 +a,且这两种肯定不能同时取。于是一共只有两种本质不同的方案。以第一步取 +a 为例子,那么之后的操作如果成环了那么就一定与 \(a+b>m+1\) 矛盾。同时两种取法路径也不可能有交,否则同样会成环。于是我们只需要求出能走多少步即可。一开始 \(v\) 要先对 \(a\) 取模。
然后比如我们第一步取 \(+a\)。那么首先让 \(v\) 对 \(b\) 取模,并且于是我们令 \(+a\) 的次数为 \(x\),那么得到 \(-b\) 的次数为 \(\lfloor\frac{v+xa}{b}\rfloor\)。于是我们要找到最小的 \(x\) 使得得到的数 \((v+xa)\%b\ge m+1-a\)。仔细分析一下,实际上满足要求的 \((v+xa)\%b=v\%b+xa\%b\),否则 \(-b\) 后就能继续 \(+a\)。所以实际上我们即想要求出最小的 \(x\) 使得 \(xa\%b\in[L,R]\)。考虑 \(xa\%b\ge y\) 等价于 \(\lfloor\frac{xa+b-y}{b}\rfloor=\lfloor\frac{xa}{b}\rfloor+1\)。于是我们二分这个 \(x\),然后类欧计算即可。