「2024 July」做题笔记
发现概率/方案数只和有多少个位置和初始状态相同有关。
如何预处理和每个状态 \(i\) 相同个数为 \(j\) 的权值和呢?
考虑按位来。类似高维前缀和的思想,那么就是前 \(k\) 位与 \(i\) 有 \(j\) 个相同,然后后面全部相同的权值和。直接转移即可!
求方案可以矩乘。由于矩阵相同,可以类似 bsgs 的思想预处理 \(B^0,B^1,...B^{blk},B^{2blk}...\)。
时间复杂度 \(O(nk^3+qk^2+\sqrt {Mod}k^2)\)。
即 \(\sum _{x\in I} b_x\geqslant a_i\),\(\sum _{x\in I} -b_x\geqslant -a_i\),\(\forall b_x \geqslant 0\),最小化 \(\sum b_x\)。
对偶得 \(\sum s_i-t_i\leqslant 1\),最大化 \(\sum a_i(s_i-t_i)\)。
猜测最优解为整数。
设 \(f_{x,i,j,k}\) 为前 \(x\),三种操作的后缀最大值为 \(i,j,k\)。
那么满足条件当且仅当 \(i,j,k\leqslant 1\)。
发现 \(i,j,k\geqslant 0\),因为出现负数肯定后面的后缀最大。同理推出 \(-1\leqslant s_i-t_i\leqslant 1\)。
直接 dp 即可。
这个题真只有 *3100 吗?
考虑从左到右扫描线,整体 dp 维护只考虑 \(r\leqslant k\) 的区间,上一次在 \(i\) 开枪的最大🦆数。
每次形如,给一个后缀加 \(1\),以及查询 \(i-r\) 前缀最大值赋值给 \(i\)。
前一个操作只会进行 \(O(n)\) 次,考虑优化后一个操作的次数。
考虑 \(f_{i,i}\) 什么时候和 \(f_{i,i-1}\) 不同。发现要么是存在区间满足 \(l=i-r\),要么 \(f_{i,i-r}\) 是唯一前缀最大值。注意到这些情况也是 \(O(n)\) 的。
使用优先队列+线段树维护即可。
非常难实现。参考了一下题解。
P6256 [ICPC2019 WF] Directing Rainfall
可以列出 \(dp_{i,j}\) 表示第 \(i\) 块布横坐标为 \(j\) 需要的最小代价,显然可以离散化。
想想用什么顺序进行这个 dp。发现可以拓扑排序,然后维护一棵线段树,对应的位置转移(进行修改)。
那么操作就是区间加和区间进行前/后缀依次赋 min。可以线段树维护。
到时候来打。
考虑对于一个点可以找到和它还没在一个连通块的边,也就是说,可以找到一棵生成树。
那么现在只用判断是否有同侧边。发现可以枚举树边删去,判断是否联通,然后就做完了。
通过玄学乱搞卡进次数内并过掉了。
考虑暴力是:枚举左端点,向右扫右端点,每次取出堆中前 \(k\) 大。
考虑第 \(k\) 大的数,包含它的区间肯定有恰好 \(k-1\) 个大于它的值,从小到大删数,那么答案只能在相邻的 \(2k\) 个数中选。
那么直接链表维护即可。
qoj6199 Frustration and Bracket Sequences - Problem
首先算出添加括号数是平凡的,移动次数也是固定的,考虑如何快速算出。
考虑左边的右括号向左移动。那么遇到右括号个数会加 \(1\),并且 不会增加移动次数。遇到左括号个数减 \(1\),增加当前个数次移动步数。
那么遇到第 \(i\) 个左括号就是增加了 \(\max(a_i-i,0)\) 次,\(a_i\) 表示前面的右括号个数。
然后 把右括号看成 \(1\),左括号看成 \(-1\),问题转化为前缀 \(\geqslant 0\) 并且当前为 \(-1\) 点的前缀总和。
主席树维护即可。 由于有修改,分块维护即可。
SP419 TRANSP - Transposing is Fun
写成二进制的形式,其实就是向左移 \(a\) 次。求本质不同串数。所以板题了。
看起来是 min+ 卷积,非常经典啊。但是发现只会有一个位置不选满。
所以考虑前后缀合并,但是也是同样的复杂度。
这种题要单个单个加,尝试编一个分治。发现只需要设计 dp 表示当前不含分治区间的所有数的贡献即可。
时间复杂度 \(O(nk\log_2 n)\)。
考虑枚举 \(1\) 连的边,看成区间的形式,发现和这条线相交的所有线段是互相包含关系。
枚举最外面那一条,此时整个线段被化为了四部分,相邻的部分可以连边。并且,对于一个部分,肯定是左边一些点连左边,右边一些点连右边。
画一下发现这个问题可以被化为三个子问题,也就是 \(f_{l,r,x}\) 表示 \([l,r]\) 中 \(x\) 和外界相连的方案数。所以直接转移就行了。
时间复杂度 \(O(n^7)\),常数极小所以就能过了。
优化的话枚举 \(p,q\),然后发现其它的式子和 \(x\) 无关,再设 \(g_{l,p,k}\) 为 \(\sum f_{l,p,i} [a_{i,k}=1]\)。可以优化到 \(O(n^5)\)。
考虑枚举根最后留,那么当前删边,如果父亲与根联通就要提供 \(\frac 1 2\) 的概率,否则概率为 \(1\)。
感觉一下,这个东西和一条边删除的时间有关,如果向上树形 dp 的话,只对子树最后删除的一些边有限制。
并且发现,这个兄弟之间的关系是很浅的,因为本题就是一些儿子和父亲的合并。
设 \(f_{i,j}\) 为 \(i\) 为根,考虑最后删的 \(j\) 条边,最后留下 \(i\) 的方案(要乘上刚才说明的概率)。答案就是 \(f_{root,n-1}*\frac {1} {(n-1)!}\)。
考虑 \(v\rightarrow u\),枚举删边时间戳 \(i\),可以直接对此转移。
然后子树合并直接卷积就行了,乘上有限制的和没限制的组合数即可。
时间复杂度 \(O(n)\)
Bob 的策略肯定是后面的乱猜,那么首先可以写出一个没啥用的 dp。
考虑设每次询问后确定了多少个数 \(\{c_i\}\)。发现 \(c_i\leqslant c_{i+1}\),且 \(i\) 的出现次数 \(\leqslant n-i\)。考察一下出现的概率,发现都是 \(\frac 1 {n!}\)!所以只用计算方案数。
将多出的步数分给 \(n\),且 \(c_n\geqslant 1\)。也就转化为,\(i \in[0,n]\) ,\(\sum d_i= m-1\) 且 \(d_i\leqslant i\) 的方案数。
容斥。那么剩下的就是一个组合数,所以只和选的 \(\sum i\) 有关。发现这就是五边形数的形式:\(\sum_{i=1}^{+\infty}(1-x^i)=\sum_{i=-\infty}^{+\infty}(-1)^i x^{i(3i-1)/2}\)。可以 \(O(\sqrt n)\) 求出。
所以总复杂度线性。

浙公网安备 33010602011771号