Atcoder ABC243

Atcoder ABC243

C - Collision 2

题面:判断是否存在一行中第一个往右走的人的右边有一个往左走的人。

sol:map离散化一下,每行用vector存一下,排个序。

D - Moves on Binary Tree

题面:给你一个数 \(x\) 对应在树上的位置,按照要求在一颗无限完全二叉树上走 \(n\) 步,可以向上走,向左走,向右走。

sol:明显向上走是除2,向左走是乘2,向右走是乘2加1。模拟即可。

但走的中间过程可能会爆 \(int128\) ,所以用一个字符串来模拟这个过程,最后算出答案。

E - Edge Deletion

题面:断掉 \(k\) 条边使得两个点之间最短路不变,最大化这个 \(k\)

sol:floyd求出两点之间最短路,对于每条边判断是否存在除这条边之外的路径小于等于当前边长,有则可以删掉。

F - Lottery

题面:\(n\) 个物品每个物品有个概率 \(p_{i}\) ,问抽\(M\) 次抽到 \(K\) 个不同物品的概率

sol:根据组合数学 答案为 \(\frac{K!}{\prod_{i = 1}^{n}c_{i}} \prod_{i = 1}^n p_{i}^{c_{i}}\) , 这部分 \(\frac{1}{\prod_{i = 1}^{n}c_{i}} \prod_{i = 1}^n p_{i}^{c_{i}}\) 可以通过dp来进行计算。可以发现选取与顺序无关,所以把问题简化,直接考虑定序问题,那么可以设计\(dp[i][j][k]\) 表示前 \(i\) 个物品中抽了 \(j\) 次抽到了 \(k\) 个的概率,dp转移根据公式显然。

G - Sqrt

题面:给定一个排列,排列一开始只有给定一个的数 \(x\) ,把\(1 \thicksim \lfloor {\sqrt y } \rfloor\) 中的一个数加入排列末尾,\(y\) 为排列末尾的数,问有多少个排列。

sol:显然这个可以\(O(n \sqrt n)\)预处理,然后\(O(\sqrt x )\) 在线处理,显然在线时间复杂度不能承受并且只能预处理到 \(n = 10^5\)。我们考虑对在线操作再开一次根号,考虑计算贡献,\(ans = \sum_{i = 1}^{x ^ {1/4}} ({\lfloor \sqrt x \rfloor} - i ^ 2 + 1)f_i\)

posted @ 2022-03-15 22:36  wtz2333  阅读(156)  评论(0)    收藏  举报