Codeforces Round 937 (Div. 4)

A. Stair, Peak, or Neither?

题面即做法。

B. Upscaling

把一个 2x2 的方格看成一个大方格。

坐标对应:\((x , y) \rightarrow (\lfloor\frac{x + 1}{2}\rfloor , \lfloor\frac{y + 1}{2}\rfloor)\)

由于两个符号交错出现,所以考虑 变换后 横纵坐标和 的奇偶性性质。

和为奇 \(\rightarrow\) .,和为偶 \(\rightarrow\) #

用到这个 trick 的题:CF1915F

C. Clock Conversion

读入使用:scanf("%d:%d" , &a , &b);

后面就是纯 \(if\) 判断输出。

D. Product of Binary Decimals

预处理出来所有 \(\leq 10^5\) 的只包含 0 和 1 的数。

对于每一个询问的 \(a\) 枚举每一个预处理的数暴力做除法就行了,如果最后剩下来的是 1 那就输出 YES ,否则输出 NO

E. Nearly Shortest Repeating Substring

\(n\) 的因子个数是 \(\log n\) 级别的。

所以暴力枚举长度 \(n\) 的因子然后暴力扫一遍就可以达到 \(O(n\sqrt{n})\)

预处理因子再暴力扫一遍复杂度为 \(O(n\log n)\)

F. 0, 1, 2, Tree!

性质 1:有解的充要条件为 \(c = a + 1\)

证明:每多一个拥有 a 节点,就会多一条支路,这条支路最后会导向一个叶子节点。

而为什么跟 b 节点没关系呢,因为 b 节点可以通过在叶子节点的头上挂任意长度的链构造出来。

性质 2:深度最小的构造法是模拟完全二叉树。先挂 a 节点再挂 b 节点再挂 c 节点。

G. Shuffling Songs

无脑状压 dp 。

ABC343G的弱化版

做法是设 \(f_{s , i}\) 代表集合为 \(s\) 以串 \(i\) 为结尾的序列是否存在。

转移方程:从小到大枚举集合 \(s\) ,枚举当前结尾 \(i\) ,再枚举上一个结尾 \(j\) ,写出:

\[f_{s , i} |= f_{s \bigoplus (1 << i - 1) , j} \]

统计答案即枚举集合和结尾并对 \(f\) 为 1 的集合的 popcount 取 max 。

posted @ 2024-03-29 14:18  NEUQ-zyb  阅读(175)  评论(0)    收藏  举报