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\) # 。
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 。
做法是设 \(f_{s , i}\) 代表集合为 \(s\) 以串 \(i\) 为结尾的序列是否存在。
转移方程:从小到大枚举集合 \(s\) ,枚举当前结尾 \(i\) ,再枚举上一个结尾 \(j\) ,写出:
统计答案即枚举集合和结尾并对 \(f\) 为 1 的集合的 popcount 取 max 。

浙公网安备 33010602011771号