CF2115 Div1
B
比较人类智慧.
后面操作会覆盖前面的,考虑对序列 \(b\) 构造一种具有必要性的操作使得满足题目限制,因为一个重要事实是序列 \(a\) 并不唯一,只要对于任意位置,在被覆盖前没有覆盖其他位置的操作,或者其他位置之后还可以被覆盖的,都满足题意.
根据上述思考,可以发现:在 \(b\) 与操作序列确定时,当根据必要条件构造出某个 \(a\),对于任意会被覆盖的位置(除去自己覆盖自己的情况),若初始值为 \(-\infty\) 时经过操作仍然得到 \(b\) 则合法,否则不存在合法的 \(a\). 充分性显然,因为限制不弱于原构造. 必要性证明考虑上文的观察.
那么怎样构造出具有必要性的操作呢?倒序考虑,\(b_i\leftarrow \min(b_j,b_k)\),那么在已知 \(b_i\) 的情况下,操作前的 \(b_j',b_k'\) 就不能小于 \(b_i\),所以令 \(b_j'\leftarrow\max(b_j,b_i),b_k'\leftarrow\max(b_k,b_i)\).
实现时 \(-\infty\) 取 \(0\) 即可.
C
很巧妙的状态设计.
考虑能操作就操作不一定优,当且仅当未闪耀时遇到所有怪物血量相同,考虑 DP 来处理这个东西.
要想办法表述怪物血量是否相同这个限制,直接加一维 \(0/1\) 肯定不行,去找其他限制. 考虑闪耀时不能操作当且仅当最小值已经为 \(1\),而值域在可接受范围内,所以直接加一维最小值;除去最小值剩下要几次单个 \(-1\) 才能到所有怪物血量相同的状态显然也影响概率,也加进去.
现在有一个初步的状态:设 \(f_{i,j,k}\),表示还剩 \(i\) 次操作没做,血量最小值为 \(j\),总血量为 \(nj+k\) 时成功的最大概率. 但是空间复杂度是 \(O(nmv^2)\),而且似乎不好直接优化了. 但是似乎可以转移了,尝试一下:
- 初始状态 \(f_{i,1,0}=1\),可以通过一直不操作来得到成功局面.
- 血量最小值大于 \(1\) 且血量全为最小值时,闪耀肯定做全局操作,否则取较大值,有转移:
- 有血量不为最小值的情况时不管闪耀与否直接操作更优,有转移:
发现 \(k\) 这一维在变为 \(0\) 后不会超过 \(n-1\),说明有优化空间. 如果能成功,\(k\) 至少要变为 \(0\) 一次,而在这之前都是能操作就操作. 由于两种操作对 \(k\) 影响不同,计算操作 \(i\) 次达到 \(0\) 的概率,钦定第 \(i\) 次一定不闪耀,概率即为 \((1-p)^kp^{i-k}{i-1\choose k-1}\).
系数可以递推预处理,最后乘起来即可.