意外失去双手
打代码的愿望已经消失殆尽了。这是个问题,但我还没想好怎么解决。
《CF1608F MEX counting》
记录有多少个位置的值未确定。转移系数是组合数与第二类斯特林数,难搞。
考虑 系数提前计算(真的有这种名字的东西吗)。
- 去掉斯特林数:提前给这些未确定的值做值的归类,即记录不同的值的种类数。
- 去掉组合数:提前定序,这样只能依次取用。
因此易得转移式。共三类转移:\(\text{mex}\) 增大、新未定值、旧未定值。
最后 \(f(v,i)\) 对答案的贡献是,将 \(i\) 个无标号球放入 \((n{-}v)\) 个有标号盒子,可以空盒的方案数。经典隔板法,式子我不列了。复杂度 \(\mathcal O(n^2 k)\) 。
《USACO 2020.2 Platinum Help Yourself》
这是 \(\sf Quack\) 分配给我的。手气不错,选了个水题。
令 \(f(r)\) 为 \([1,r]\) 的连通块个数的集合 \(\rm EGF\),令 \(g(l,r)\) 为 \([l,r]\) 被 \([l,r]\) 内的线段 \(\rm induce\) 的方案数。
其中 \(g(l,l)=1,\;f(0)=\exp(0x)=1\) 。
看上去就明显复杂些的是
只有 \(2^{c(m+1,r)}\) 在随着 \(r\) 改变,以及 \(m\) 的上指标发生变化。但后者可以认为是 \(c(l,r)=-\infty\;(l>r)\) 导致的,这启发我们定义
当 \(r\) 移动时,只是 \(\lambda_m\) 的系数发生变化:对 \(m\leqslant l_0\) 执行 \(c\gets c+1\) 罢了。
因此 \(\chi\) 可维护。再把 \(f(l)\) 加到 \(\lambda_l\) 里面去,就顺便统计了另一项。
复杂度 \(\mathcal O(nk\log n+nk^2)\) 。
《AGC039F Min Product Sum》
这题面我不知道理解错了多少次。
记 \(r_i,c_i\) 分别为行和列的 \(\min\),它说的权值是 \(\prod_{i=1}^{n}\prod_{j=1}^{m}\min\{r_i,c_j\}\),希望你们不会搞错。
考虑每个 \(r_i\) 或 \(c_i\) 的贡献,那就是不同名变量中大于它的数的数量。等于的随便放在一边。
按照行或列填矩阵是困难的,且上面这玩意儿明显按照值有序,因此按值 \(\tt dp\) 。记 \(f_v(a,b)\) 为,填了 \([v,k]\) 中数字,剩余 \(a\) 行 \(b\) 列是空的。
考虑转移。新加入的 \(v\) 应当在 \(a,b\) 管辖范围内,二者可以分别转移。——或者你可以这么想,我们就是单纯地对 \(\{r_i\},\{c_j\}\) 在归并,顺便填了个矩阵出来,因此可以(也必须)分别转移。
以 \(a\) 侧为例。一行上填数的方案是 \(\lambda=(k-v+1)^{m-b}-(k-v)^{m-b}\),有转移
在 \(b\) 这一维上的转移是类似的。转移是 \(\mathcal O(n{+}m)\) 的,状态 \(\mathcal O(knm)\) 个,总复杂度 \(\mathcal O[knm(n{+}m)]\) 。
另:狗狗用了些奇特的转化、奇特的状态定义,也得到了个做法,尚不清楚与该做法的联系。
《某道考试题》:长为 \(n\) 的序列 \(a\) 作 \(m\) 轮冒泡排序,每次大小比较有 \(p\) 的概率返回错误结果,求最后每个位置上的数的期望大小。\(n\leqslant 15\land m\leqslant 500\) 。
我在想,究竟是我太愚蠢,还是我思考时不打草稿的习惯导致了我的砂皮行为。
看数据范围,感觉是 \({\cal O}(\text{poly}(n)m2^n)\),也就是说状态用 \(0/1\) 来记录。那 \(\text{0-1 principle}\) 吗?好像 \(1,1\) 内部的 \(\tt swap\) 的概率受到二者的相对大小关系影响?
放屁吧,那是概率诶,概率的和是 \(1\),所有情况下 \(\text{0-1}\) 序列都不变,所以没影响。我到底怎么就瞬间把自己否定了,然后再也不考虑这种做法的?
注意 \(1\) 的数量是不变的,因此 \(\text{0-1 principle}\) 共有 \(\mathcal O(2^n)\) 状态。转移 \(\mathcal O(nm)\) 步,复杂度 \(\mathcal O(nm2^n)\) 。
《卡常专训之 某道考试题》:给 \(n\) 个点的带边权有向图,\(q\) 次求 \(s\to t\) 且走过的边数为 \(a\) 的第 \(k\) 小的边权和。\(n,q\leqslant 166\land k\leqslant 15\land a\leqslant 10^6\) 。
暴力矩乘是 \(\mathcal O(n^3k\log k)\) 的。但是,没错,出题人就要卡那个 \(\log k\) 。
在矩乘时,考虑用分层的最值维护:最外层建大小为 \(\mathcal O(n)\) 的堆维护中间点 \(x\) 的最优。在 \(x\) 变化后,可以暴力(或者用堆,不是瓶颈)查 \(x\) 的新最优值。这样单个位置是 \(\mathcal O(nk+k\log n)\) 求出的。
同样的方法也用到向量乘矩阵上,复杂度就是 \(\mathcal O(n^3k\log a+n^2q\log a)\),少个 \(\log k\) 罢了。但出题人就是要卡常,你拿他没办法 😒
《NOI2016 网格》
答案不超过 \(2\) 。金角银边草肚皮。因此只需要做一些小思考。
判连通性。可以考虑将每一行的连续跳蚤直接变成连通块,多行没有蛐蛐的行变为连通块,这样只有 \(\mathcal O(c)\) 个点和边,直接判断就行。
放一个蛐蛐?只可能放在已有蛐蛐的八连通格内。把这些点视作关键点,还用上面的方法划分连通块(不含关键点必然连通嘛),判断有无割点即可。
看题解区,好像特殊情况比较多,没写过,不知道细节处理完不完善。
如果这篇文章对你有帮助,那么作者是:OneInDark,原文在:https://www.cnblogs.com/OneInDark/p/16512471.html,否则我也不知道这是谁的文章。