Loading

【题解】CF303E Random Ranking

按照常规做法先将值域分为 \(O(n)\) 段。

考虑一个人 \(i\) 在第 \(j\) 段时,其他的人选择的所有情况的概率,注意到其他的人可以分为三类:1. 选段在 \(j\) 前。 2. 选了第 \(j\) 段。 3. 选段在 \(j\) 后。第一类对排名的贡献固定,第二类可以算概率(每个人等价),第三类不对排名造成影响。

那么只需要记录前两类人的数量,直接 dp 的复杂度为 \(O(n^5)\)

代码:Submission #127571952 - Codeforces

考虑优化,注意到转移过程大部分只和 \(b\)(当前值域段编号)有关,事实上,对于 \(i\) 的更新就是将除了 \(i\) 以外的人全部卷起来,接下来就是套路分治了。

dp 转移的时候卡卡上界就能过,时间复杂度 \(O(n^4\log n)\)

代码:Submission #127572775 - Codeforces

posted @ 2021-09-01 13:27  Qiuly  阅读(79)  评论(0编辑  收藏  举报