2021年第45周总结
11.10
第45届ICPC区域赛济南站
Problem A
根据题目定义,ZijZ_{ij}Zij可以写成Zij=⊕k=1NAi,kCk,jZ_{ij} = \oplus_{k=1}^{N}A_{i,k}C_{k,j}Zij=⊕k=1NAi,kCk,j。而Dij=Bi,jCijD_{ij}=B_{i,j}C_{ij}Dij=Bi,jCij,令等式左右相等,即为一个异或方程组,使用线性基求解这个异或方程组,求出每一列的自由变量的个数,每一列的方案即为2n2^n2n,其中nnn为自由变量的个数,再将每一列乘起来即可。
难点&思路:异或方程组+线性基。
11.11
CF 1029E
树上贪心,需要自底向上贪心,考虑拓扑排序,首先将度为111的点加入队列,依次考虑队列中的节点,如果队列中的点不能满足路径要求,则将这个点的父节点连接一条从111到父节点的边,这样做一定是最优的,连接到父节点还能对兄弟节点进行贡献。
思路:拓扑排序。
难点:贪心。
ABC226B
使用位Hash一定要排除ai=0a_i=0ai=0的情况。
11.12
第45届ICPC区域赛济南站
Problem J
二分图构造。
首先一颗树是一个二分图,且二分图的一边的边数不会超过n2\frac{n}{2}2n,首先我们将二分图左边的最后两位置为101010右边置为010101,这样可以保证每一侧不会存在边。然后考虑边数较小的那个部分,将第iii个设置为全集减去第i+2i+2i+2位,这样就对应一个钥匙扣,只有右边该位为111的才会与他相连,那么我们遍历右边的节点,对于每个节点,考虑与他相连的节点jjj,将位j+2j+2j+2设置为111,即可。
难点&思路:构造+二分图。
11.14
LC 65双周赛
Problem D
首先这是一个决策单调性问题,外层框架考虑二分。子问题为判断kkk个工人是否能够满足kkk个任务。我们想让工人的能量尽量不能浪费,药品的作用尽量不能浪费。我们考虑使用multiset
或者单调队列来维护这个信息。
思路:二分。
难点:贪心匹配问题。
ABC 227
Problem C
神奇的O(n23)O(n^{\frac{2}{3}})O(n32)枚举算法。
求出ABC≤NABC \leq NABC≤N的三元组(A,B,C)(A,B,C)(A,B,C)的个数(1≤A≤B≤C≤N1 \leq A \leq B \leq C \leq N1≤A≤B≤C≤N)。
比赛时看到N≤1011N \leq 10^{11}N≤1011,能猜到应该是根号算法或者类根号算法,但是想不出来。
考虑三元组的有序性,AAA的取值应该在1≤A≤N31 \leq A \leq \sqrt[3]{N}1≤A≤3N,BBB在A≤B≤NAA \leq B \leq \sqrt{\frac{N}{A}}A≤B≤AN,CCC在B≤C≤NABB \leq C \leq \frac{N}{AB}B≤C≤ABN。
发现内层的CCC循环次数是NAB−B+1\frac{N}{AB} - B + 1ABN−B+1次,因此可以直接去掉CCC的循环。
ll ans = 0;
for (ll a = 1; a * a * a <= n; a++)
for (ll b = a; b * b * a <= n; b++)
ans += n / (a * b) - b + 1;
很显然时间复杂度取决于循环的执行次数为∑A=1N3NA−A+1\sum_{A=1}^{\sqrt[3]{N}} \sqrt{\frac{N}{A}} - A + 1∑A=13NAN−A+1,考虑积分估计。
∑A=2N3(NA−A+1)≤∫1N3(NA−A+1)dA≈O(N23) \sum _{A=2}^{\sqrt[3]{N}} \left(\sqrt{\frac{N}{A}}-A+1 \right) \leq \int_{1}^{\sqrt[3]{N}}\left(\sqrt{\frac{N}{A}}-A+1 \right)dA \approx O(N^{\frac{2}{3}}) A=2∑3N(AN−A+1)≤∫13N(AN−A+1)dA≈O(N32)
Problem D
仍然是一道决策性单调问题,外层框架仍使用二分去取是否可以安排PPP个任务。
每次check
我们都考虑和式s=∑i=1nmin(P,Ai)s = \sum_{i=1}^{n} \min(P,A_i)s=∑i=1nmin(P,Ai),如果s≥K×Ps \geq K \times Ps≥K×P那么PPP个任务就是可安排的,min(P,Ai)\min(P,A_i)min(P,Ai)相当于对PPP个任务的贡献度。