Ucup stage5 D
子序列计数有,当最后一位为 0 时有 \[ \begin{align*} &f_{k,0}=f_{k-1,0}+f_{k-1,1}+f_{k,0}\\ &f_{k,1}=f_{k,1} \end{align*} \] 即 \[ \begin{align*} &F_0=(x+1)F_0+xF_1\\ &F_1=F_1 \end{align*} \] 为 1 时有类似式子,该式容易由分治NTT快速计算
CF1801E
想等的直接合并为等价,范围取并,可以用并查集维护,容易发现若每次合并两个不同集合的数,那么最多只有 \(n-1\) 次合并,问题变为了如何快速查找不同的那一个,若用 HASH 表示每个点属于哪一个不同的集合,就可以快速查找第一个不同的,然后并查集合并用启发式合并的话就可以暴力修改,复杂度为 \(O(n\log^2n)\)
CF1801F
难点是不要被 \(a_i\) 的范围迷惑,直接对于 \(k\),\(\prod b_i\geq k\) 等价于 \(\lfloor \frac{k-1}{\prod{b_i}}\rfloor=0\),对于这个东西,可以直接在\(\lfloor \frac{k-1}{t}\rfloor\) 之间转移,每次需要 \(O(k^{\frac{3}{4}})\) 转移,最后一共 \(O(nk^{\frac{3}{4}})\)。
ARC084B
显然同余最短路,考虑建图,若是直接 \(x\to(x+10^n)\mod k\) 的话,边数太多,但是考虑这样一个构造,\(x\to(x +1)\mod k\) 和 \(x\to(x\times10\mod k)\) 这样连边构造也可以构造出所有数并且边数很少直接跑01bfs即可
Luogu P8456
问题转为算补集,一共有三种情况,只有全 0,只有全 1,只有全 0 和全 1。
对于前两种,建出圆方树,容易发现是若某一个点双含有 1/0 边的话则不能通行,剩下的可以任意通行,建出圆方树后,对于某些方点删边,每个连通块可以任意选两个。
对于最后一种,首先可以发现点对必然存在于同一个点双中,然后可以发现点对间的全 0 路径和全 1 路径无交,并进一步发现每个点双最多一个点对,并且其充要条件是有且只有两个点同时有 01 边。