ABC243
A-C
太水不写了。
D
题意:
从完全二叉树上点 \(X\) 开始移动,每次移动至父节点、左子节点或右子节点。询问N次移动后所处节点,保证答案小于 \(10^{18}\)。
解法:
忘了过程有可能超 long long
浪费两分钟。总之就是每一个向父节点操作会消掉最近一个未消掉的向儿子移动操作,然后糊什么解法都行。
Code
E
题意:
一张简单联通带权无向图,询问最多删多少边能保证任意两点间最短路长度不变。\(N\le 300\)。
解法:
看到数据范围就知道是 Floyd 了,问题在如何用 Floyd解。
一个显而易见的结论:一条边可以被删除仅当有另外一条联通两点的路径长度小于等于该边。
然后改一下 Floyd 板子就好了。
Code
F
不知道伯努利试验只能看题解了😭
题意:
\(N\) 个物品,抽中每个物品概率为 \(\frac{W_i}{\sum W}\),抽 \(K\) 次,询问恰好抽到 \(M\) 种不同物品的概率。对 \(998244353\) 取模。\(N\leq50\)
解法:
前置芝士:伯努利原理,在题中即为抽 \(K\) 次抽到 \(P\) 个概率为 \(W\) 的物品的概率为 \(\binom{K}{P}\times W^P(1-W)^{K-P}\)。
概率 dp,设 \(dp_{i,j,k}\) 表示当前在第 \(i\) 种物品,已抽 \(j\) 次,获得了 \(k\) 种不同物品。那么转移方程为:
答案即为 \(dp_{N,K,M}\)。
Code
G
怎么模拟赛就能场切*2000,周六就切不了呢。
sqrt
精度会爆炸,要用 sqrtl
。
题面:
初始有一个序列 \((X)\)。进行如下操作 \(10^{100}\) 次:
设末尾的数为 \(Y\),在区间 \([1,\sqrt{Y}]\) 中选择一个整数加入序列末尾。
询问可以形成多少种序列。可证明答案不超过 \(2^{63}-1\)。
\(X\leq 9\times10^{18},T\leq20\)。
解法:
首先,猜一个 dp 式子。设 \(dp_i\) 表示末尾数字为 \(i\) 的方案数。则:
朴素实现是 \(O(X^\frac{1}{2})\) 的,\(3\times10^9\) 绝对过不去,考虑优化。
由于下取整,显然 \(dp\) 是由许多区间构成,每个区间内值相同。第 \(i\) 个区间覆盖 \([i^2,(i+1)^2-1]\),所以我们存区间,对 \(dp_X\) 有贡献的区间为 \([1,X^\frac{1}{2}]\),该区间内有 \({X^\frac{1}{2}}^\frac{1}{2}=X^\frac{1}{4}\) 个区间,故时间复杂度为 \(O(X^\frac{1}{4})\)。我求每个区间的值用的 \(O(n{\frac{1}{4}})\) 算法,复杂度烂一点,应该在 \(O(X^\frac{1}{4})\) 和 \(O(X^\frac{5}{16})\) 之间,反正都能过。
Code