D1T1
若前 \(r\) 行和前 \(c\) 列已经确定,则剩下的格子全都确定。
考虑怎么判定前 \(r\) 行和 \(c\) 列确定的格子符合条件,有一些形如和相等的限制。可以发现左上角的 \(r \times c\) 的网格的每个格子要么一列等差数列编号都相同,要么一行等差数列编号都相同。可以 \(O(3^{rc} \times \operatorname{poly}(r,c))\) 的复杂度,我场上写的是 \(O(2^{rc+2c}\times \operatorname{poly}(r,c))\)。
D1T2
枚举 \(i,j\) 使得 \(dis(i,j)\) 符合条件,则要求的是 \(i,j,k\) 使得 \(i,j\) 的距离为中位数。
先考虑计算 \(dis(i,j)\) 为严格中位数的答案,然后再考虑等腰和等边三角形。等腰或等边是比较容易的。
严格中位数的贡献考虑将曼哈顿距离换为切比雪夫距离,变成二维数点。复杂度 \(O(n^2 \log n)\)。
注意到给定的距离限制很强,只有不超过 \(\dfrac{1}{20}\) 个 \((i,j)\) 符合条件,所以常数可以接受。
D1T3
考虑 \(k=2\) 时,即求 \(L(G)\) 的最大匹配,答案等于原图每个连通块边数除以二下取整求和。
\(3 \leq k \leq 6\) 时可以分类讨论贡献。
\(k=7\) 时先将 \(G\) 变为 \(L(G)\) 然后做 \(k=6\)。
D2T1
类似 DAG 容斥,将过程分层,每次剖离最后一层。
记 \(f_i\) 表示 \(i\) 个点的图成功的概率,转移枚举最终扩展到 \(j\) 个然后无法扩展,复杂度 \(O(n^2)\)。
D2T2
将询问拆成弦图,所以要做的只有直角三角形,其中直角边平行于坐标轴。
按照 \(x\) 扫描线,应该只需要维护李超线段树。
D2T3
首先可以视作 \(q_i = 1\),最后答案乘以 \(\prod p_i^{q_i - 1}\)。
注意到每个 \(s_i\) 的本质是限制存在某个 \(x\) 模 \(p_i\) 的余数等于一个定值。
如果所有 \(p_i \geq m\),直接容斥。容斥不需要枚举子集,原因是只有 \(|S|\) 有意义而具体的子集是什么不重要。
对于 \(p_i < m\) 的爆搜,搜出所有状态后对大的做容斥。
这样过不去,考虑分 \(p_i < \dfrac{m}{2}\) 和 \(p_i \geq \dfrac{m}{2}\),\(p_i \geq \dfrac{m}{2}\) 时注意到中间会有一个区间只会被选择一次,爆搜记录状态时只需要记录两侧的状压和中间的数量,状态数小很多,可以通过。