2021年第45周总结

2021年第45周总结

11.10

第45届ICPC区域赛济南站

Problem A

根据题目定义, Z i j Z_{ij} Zij可以写成 Z i j = ⊕ k = 1 N A i , k C k , j Z_{ij} = \oplus_{k=1}^{N}A_{i,k}C_{k,j} Zij=k=1NAi,kCk,j。而 D i j = B i , j C i j D_{ij}=B_{i,j}C_{ij} Dij=Bi,jCij,令等式左右相等,即为一个异或方程组,使用线性基求解这个异或方程组,求出每一列的自由变量的个数,每一列的方案即为 2 n 2^n 2n,其中 n n n为自由变量的个数,再将每一列乘起来即可。

难点&思路:异或方程组+线性基。

11.11

CF 1029E

树上贪心,需要自底向上贪心,考虑拓扑排序,首先将度为 1 1 1的点加入队列,依次考虑队列中的节点,如果队列中的点不能满足路径要求,则将这个点的父节点连接一条从 1 1 1到父节点的边,这样做一定是最优的,连接到父节点还能对兄弟节点进行贡献。

思路:拓扑排序。
难点:贪心。

ABC226B

使用位Hash一定要排除 a i = 0 a_i=0 ai=0的情况。

11.12

第45届ICPC区域赛济南站

Problem J

二分图构造。

首先一颗树是一个二分图,且二分图的一边的边数不会超过 n 2 \frac{n}{2} 2n,首先我们将二分图左边的最后两位置为 10 10 10右边置为 01 01 01,这样可以保证每一侧不会存在边。然后考虑边数较小的那个部分,将第 i i i个设置为全集减去第 i + 2 i+2 i+2位,这样就对应一个钥匙扣,只有右边该位为 1 1 1的才会与他相连,那么我们遍历右边的节点,对于每个节点,考虑与他相连的节点 j j j,将位 j + 2 j+2 j+2设置为 1 1 1,即可。

难点&思路:构造+二分图。

11.14

LC 65双周赛

Problem D

首先这是一个决策单调性问题,外层框架考虑二分。子问题为判断 k k k个工人是否能够满足 k k k个任务。我们想让工人的能量尽量不能浪费,药品的作用尽量不能浪费。我们考虑使用multiset或者单调队列来维护这个信息。

思路:二分。
难点:贪心匹配问题。

ABC 227

Problem C

神奇的 O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)枚举算法。

求出 A B C ≤ N ABC \leq N ABCN的三元组 ( A , B , C ) (A,B,C) (A,B,C)的个数( 1 ≤ A ≤ B ≤ C ≤ N 1 \leq A \leq B \leq C \leq N 1ABCN)。

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

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

发现内层的 C C C循环次数是 N A B − B + 1 \frac{N}{AB} - B + 1 ABNB+1次,因此可以直接去掉 C C C的循环。

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 = 1 N 3 N A − A + 1 \sum_{A=1}^{\sqrt[3]{N}} \sqrt{\frac{N}{A}} - A + 1 A=13N AN A+1,考虑积分估计。

∑ A = 2 N 3 ( N A − A + 1 ) ≤ ∫ 1 N 3 ( N A − A + 1 ) d A ≈ O ( N 2 3 ) \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 (AN A+1)13N (AN A+1)dAO(N32)

Problem D

仍然是一道决策性单调问题,外层框架仍使用二分去取是否可以安排 P P P个任务。

每次check我们都考虑和式 s = ∑ i = 1 n min ⁡ ( P , A i ) s = \sum_{i=1}^{n} \min(P,A_i) s=i=1nmin(P,Ai),如果 s ≥ K × P s \geq K \times P sK×P那么 P P P个任务就是可安排的, min ⁡ ( P , A i ) \min(P,A_i) min(P,Ai)相当于对 P P P个任务的贡献度。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值