呆呆鸟 ICPC 训练记录

The 1st Universal Cup. Stage 20: India

A. Maximum Bitwise OR

注意到若 $ x $ 拥有二进制位 $ 2^k $,先对 $ x $ 进行操作 $ 2^k, 1 $,即可将 $ x $ 变为 $ 2^{k+1}-1 $,因此答案步数至多为 $ 2 $,此时只需要判断能否使用 $ <2 $ 次操作达成目标。

对每个二进制位做前缀和,设区间内二进制最高位为 $ k $,若区间内 $ 2^0 $ 到 $ 2^k $ 均出现过则答案为 $ 0 $。否则考虑能否用一次操作,获取 $ 0\sim k $ 中所有缺失的二进制位,注意到若 $ 2^x $ 只在区间内出现了一次,则操作 $ 2^x $ 所在的数可能会导致区间内不存在 $ 2^x $,这样的数至多只有 $ \log A $ 个,将其挖掉后,对这 $ \log A $ 个数与剩余的 $ 1 + \log A $ 个区间分别计算即可,复杂度 $ O((n+q) \log A) $。

C. Exam Requirements

2-SAT 板题,如果两个区间相交,要么是有端点重合,要么是一个区间包含了另一个区间的某个端点,使用 ST 表优化建边,对端点特殊讨论即可避免连出自环,复杂度 $ O(m \log n) $。

F. Longest Strictly Increasing Sequence

签到。

H. Treelection

如果一个点 $ x $ 能成为最大值,记 $ x $ 子树大小为 $ k+2 $,则 $ x $ 一共会收到 $ k+1 $ 张选票,其余点最多只能收到 $ k $ 张选票,我们可以写出一个 dp:$ dp_i = \max(0, \sum_{v\in son_u}dp_v-k)+1 $,其中 $ dp_i $ 表示 $ i $ 子树内有多少选票必须传到父亲,合法条件即为 $ dp_1 = 1 $。

考虑二分出最大的使得 $ dp_1 = 1 $ 的 $ k $,此时 $ k $ 若增加 $ 1 $ ,$ dp_1 $ 也会增加 $ 1 $,因此子树大小 $ \le k+2 $ 的点均满足条件。

注意到 $ x $ 点使用上述算法算出的 $ dp $ 值只可能是 $ 1 $ 或 $ 2 $,实际 dp 时要将其当成 $ 1 $ 计算,若 $ x $ 到 $ 1 $ 路径上所有点 dp 值均 $ \ge 2 $,则需要将 $ dp_1 $ 减少 $ 1 $,因此子树大小为 $ k+3 $ 的点也可能满足条件,对其进行一次 dfs 特殊处理即可。

The 1st Universal Cup. Stage 22: Shaanxi

E. Neighbourhood

点分治,问题转换为子树加 $ x $,查询有多少个数 $ \le d $,可以用分块维护。

注意到点分治后第 $ i $ 层的点数至多为 $ \frac{n}{2^i}+1 $,第 $ i $ 层的总复杂度为 $ O(q\sqrt{\frac{n}{2^i}}) $,注意到 $ \sqrt{\frac{n}{2^i}} $ 每经过两层就会减半,因此总复杂度其实还是 $ O(q \sqrt{n}) $,并不会因为层数的增加而多 $ \log $。

I. Digit

记忆化搜索 $ dp $,状态数很少。

K. water235

签到。

L. Square

经过一些数学的分析,发现如果 $ x $ 跳一步跳到了 $ x+k $,则 $ x+k $ 下一步一定跳到 $ x+k+(k+1) $,后面贪心下就好了。

The 2nd Universal Cup. Stage 6: Warsaw

B. The Doubling Game 2

设 $ f_{i,j} $ 表示 $ i $ 子树自己合出了一个 $ 2^j $ 放在 $ i $ 号点的方案书,$ g_{i,j} $ 表示 $ i $ 要从父亲要一个 $ 2^j $ 的方案数,再记一个 $ dp_i $ 表示不管 $ i $ 是什么,$ i $ 子树随便填的方案数。

对于一个点 $ u $,只需要对它的所有孩子 $ v $ 做一次状压 dp 就能得到答案,但这样复杂度太大了,我们设 $ level_u $ 表示 $ f_{u,i} \neq 0 $ 中最大的 $ i $,容易发现 $ u $ 一定存在一个孩子序列 $ v_0, v_1, \cdots, v_{level_{u}-1} $,使得 $ level{v_i} \ge i $。此时将 $ u $ 的所有孩子 $ v $ 按照 $ level_v $ 排序,从小到大 dp,一个点 $ v $ 贡献的复杂度仅为 $ O(2^{level_v}) $。我们可以通过一些巧妙的证明发现 $ \sum_{u=1}^{n} 2^{level_u} $ 至多是 $ O(n \log n) $ 级别的(好像其实是 $ O(n) $ 级别的,但是还不会证),之后瞎 dp 下就可以了。

F. Max-Min

只考虑 max 之和怎么维护,min 也是一样的。

考虑操作 $ a_x \to a_x + 1 $ 产生的影响,找到左右第一个 $ > a_x $ 的位置,在这两个位置之间,包含 $ x $ 的区间的 max 均会 $ +1 $,用线段树维护即可。

G. Matrix Inverse

随机一个向量 $ R $,计算 $ RAB $,即可找出 $ B $ 被修改的所有列。

随机一个向量 $ R $,计算 $ BAR $,即可找出 $ B $ 被修改的所有行。

枚举 $ B $ 被修改的每一列,问题变为找到一个向量 $ b $,使得 $ Ab = I $,由于 $ b $ 最多只有 $ 12 $ 个位置跟 $ B_i $ 不同,改为计算 $ A(b-B_i) = I-AB_i $,其中 $ b-B_i $ 只有 $ 12 $ 个位置可能 $ \neq 0 $,把这 $ 12 $ 个位置对应的 $ A $ 的列向量拿出来,问题就变成用 $ 12 $ 个长度为 $ n $ 的向量线性组合出目标向量,写个高斯消元/线性基状物即可。

I. Boxes

签到。

The 2nd Universal Cup. Stage 10: Harbin

The 2nd Universal Cup. Stage 14: Southeastern Europe

The 2nd Universal Cup. Stage 15: Macau

The 2nd Universal Cup. Stage 18: Dolgoprudny

The 2nd Universal Cup. Stage 20: Ōokayama

Petrozavodsk Winter 2024. Day 4. PKU Contest 2

The 3rd Universal Cup. Stage 2: Zielona Góra

posted @ 2024-07-27 20:06  LJC00118  阅读(358)  评论(0)    收藏  举报
/*
*/