题解 ARC139D【Priority Queue 2】

problem

给定 \(n,m,k,x\),给定了一个有 \(n\) 个元素的可重集合 \(a_i\in [1,m]\),会进行 \(k\) 次如下操作:选择一个数 \(y\in[1,m]\) 加到 \(a\) 中,并把 \(a\) 中第 \(x\) 小的元素删除。

\(m^k\) 种情况,对于每种情况的价值定义为最后 \(a\) 集合的和,对于所有情况价值求和。

  • \(1\le n,m,k\le 2000\)\(1\le x\le n+1\)\(1\le a_i\le m\)

solution \(O(n^3)\)

如果在删数的时候,不删掉它,而是给个标记,数 kth 的时候跳过,那么完成之后排序会发现打标记的地方是连续段,而且可以算出来。

考虑将最终状态拿出来,相同数字的放一起,强制将原来有的数放前面。然后 DP \(f/g(i,j)\) 表示放了 \(i\) 个数,填到数字 \(j\),然后分别算出方案数和总和。

solution $O(n^2)

\(a_i\) 是最终序列:\(*=\textrm E[\sum_i a_i]=\boxed{\sum_x x\times \textrm E[\sum_i[a_i=x]]=\sum_x \textrm E[\sum_i[a_i\geq x]]}\) 这样就只用算 \(\geq x\) 的。

只看 \(a_i\geq x\) 的。假设当前有 \(c\) 个数满足 \(a_i\geq x\)。考虑操作:

  • 选择一个数 \(y\in[1,m]\) 加到 \(a\) 中:有 \(p=1-\frac{x-1}{m}\) 的概率,使得 \(c\) 加一。
  • 并把 \(a\) 中第 \(x\) 小的元素删除:当 \(n+1-c\geq X\) 时,删掉 \(<x\) 的一个数。所以,当 \(c>n+1-X\) 时,使得 \(c\) 减一。

初始时的 \(c\) 叫做 \(c_0\)\(lim=n+1-X\)。枚举这 \(k\) 次操作中我们进行了 \(i\) 次加一,考虑最终的 \(c_k\)

  • \(c_0\leq lim\) 时,\(lim\) 就像一个上界顶住了 \(c\),所以 \(c_k=\min(lim,c_0+i)\)
  • \(c_0>lim\) 时,加操作无用,考虑 \(k-i\) 个减,所以 \(c_k=\max(lim,c_0-(k-i))\)

发生 \(i\) 次加一的概率是:\(p^i(1-p)^{k-i}\binom k i\),乘上最终的 \(c_k\) 即可,全部加起来。

code

solution 1:https://atcoder.jp/contests/arc139/submissions/41154363

solution 2:https://atcoder.jp/contests/arc139/submissions/41156198(看了题解)

\(e^x=exp(x)=\sum_i \frac{x^i}{i!}\)

posted @ 2023-05-04 14:10  caijianhong  阅读(16)  评论(0编辑  收藏  举报