2025.4.15 NFLS 模拟赛22, 23 部分题
模拟赛 22 T3 CF1060G Balls and Pockets
直观的想法是二分,然后一直向前跳,看是否合法,复杂度 \(O(nq\log)\)。
考虑时光倒流,假设在无穷远处有一堆球,它们覆盖了 \([inf,inf+n)\),它们不断的往 \(a_1\) 跳,直到全部消失。
感性理解一下,这些球一定会覆盖值域上 \(\geq a_1\) 的所有位置。
假设一个询问的位置在某个时刻被这些球盖住了,那么我们再进行时光倒流,让这个球少跳 \(t_i\) 时间就能算出答案。
少跳可以通过再次离线,边跳边求解。
启示
当原问题很难写(这时通常会用上可持久化数据结构)时,可以尝试离线,既能减小常数,也能降低代码难度。
不要总想用平衡树,码量较大。
模拟赛 23 T1 nfls 让别人修
正解是对每个位置 \((x,y)\) 求有多少个 \(i\) 可以取到这个位置。
我的做法和正解无关,但引发了一类问题的思考。
关于一类进制发生变化的 FWT
设原进制为 \(a\),FWT 后的进制为 \(b(a\lt b)\),那么是可以做到 \(b^n\over b-a\) 这个复杂度的。
做法是跳过所有空状态,对当前要做卷积的这一位两边分别枚举,然后拼合一个数(需要事先预处理进制转换数组),强制钦定这一位只能取 \(0\),然后做这一位的卷积。
这样做还可以避免取模和除法,进一步优化常数。