2021年第45周总结

博主分享了参加2021年第45届ICPC区域赛的经历,详细解析了线性基解决异或方程组、树上贪心策略、二分图构造以及决策单调性问题的解题思路。此外,还探讨了神奇的O(n^2/3)算法在求解三元组问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 NABCN的三元组(A,B,C)(A,B,C)(A,B,C)的个数(1≤A≤B≤C≤N1 \leq A \leq B \leq C \leq N1ABCN)。

比赛时看到N≤1011N \leq 10^{11}N1011,能猜到应该是根号算法或者类根号算法,但是想不出来。

考虑三元组的有序性,AAA的取值应该在1≤A≤N31 \leq A \leq \sqrt[3]{N}1A3NBBBA≤B≤NAA \leq B \leq \sqrt{\frac{N}{A}}ABANCCCB≤C≤NABB \leq C \leq \frac{N}{AB}BCABN

发现内层的CCC循环次数是NAB−B+1\frac{N}{AB} - B + 1ABNB+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 + 1A=13NANA+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=23N(ANA+1)13N(ANA+1)dAO(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 PsK×P那么PPP个任务就是可安排的,min⁡(P,Ai)\min(P,A_i)min(P,Ai)相当于对PPP个任务的贡献度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值