2024牛客寒假算法基础集训营1

D. 数组成鸡

image-20240208170306191

题解

观察到 \(abs(M) \leq 1e9\),容易知道如果绝对值不为 \(1\) 的数的个数大于 \(30\) 个的话,显然溢出,不会在答案的范围内

再仔细分析性质,如果整个数组中数的种类超过了 \(20\) 种,那么除了 \(0\) 之外,最坏的结果就是 \(-10, -9...-1,1,2,...10\) 这样的情况,他们的乘积为 \((10!)^2 > 1e9\),所以显然如果种类数超过 \(20\) 我们可以不用管了

对于种类数小于 \(20\) 的情况,我们考虑暴力跑出所有可行的答案放在 \(set\) 中,然后 \(O(1)\) 回答查询

那么究竟怎么暴力?我们分两种操作,第一种先将原数组升序排列,然后通过操作使得最小值为 \(0\),因为数组中不允许存在两个元素以上的值 \(> \sqrt{1e9}\),所以暴力 \([-4e4,4e4]\) 枚举偏移量,然后直接暴力 \(O(n)\) 去累乘,然后判断合法性,因为很容易超过 \(1e9\) 所以实际上很难跑满 \(O(n)\),这样就枚举出了答案的上界

第二种操作先将原数组降序排列,然后通过操作使得最大值为 \(0\),后面的操作和第一种一样,这样就枚举出了答案的下界

F. 鸡数题!

image-20240208173034039

题解:第二类斯特林数

条件 \(3\):说明二进制上一共只有 \(n\)\(1\)

条件 \(4\):说明每个 \(1\) 只能分给 \(1\) 个数

条件 \(1\):每个数至少有 \(1\)\(1\)

条件 \(2\):分完后保证有序

发现其本质就是 \(n\) 个不同的小球放入 \(m\) 个相同的盒子中,要求盒子非空,求方案数

只是最后分完之后将盒子按照大小排序而已,所以方案数没有改变

这显然是第二类斯特林数

H. 01背包,但是bit

image-20240208173501459

题解:按位枚举

假设 \(m\) 的第 \(x\) 位为 \(1\),则如果所选物品的重量或的和在第 \(x\) 位为 \(0\),那么比 \(x\) 低的位我们可以随便取 \(0\)\(1\),没有关系,比\(x\) 的高的位必须是 \(m\) 的子集,那么我们可以尽可能贪心的选,一直逼近 \(m\)

所以我们只要枚举 \(m\) 二进制中所有 \(1\) 的位,然后按照上面的步骤统计出答案后取 \(max\) 即可

最后别忘了对 \(m\) 本身统计答案,只要 \(w[i]\)\(m\) 的子集,就可以拿

I. It's bertrand paradox. Again!

image-20240208174244346

题解:期望 / 统计量的选定和参数估计

可以观察到第一个人生成的数据中 \(x, y\) 分布的更加均匀

所以我们定义随机变量 \(X\) 为点到圆心距离的平方,易得每个点被选到的概率为 \(\frac{1}{199\times 199}\),所以得到 \(E(X) = \frac{1}{199\times 199} \sum x^2 + y^2\)

我们得到了 \(1e5\) 个样本,由于样本均值是无偏估计,所以我们可以大约使用样本均值来代替期望,所以我们只要求出 \(X\) 的样本均值后与 \(EX\) 比较即可,误差较小的就是第一个人

J. 又鸟之亦心

image-20240208175037430

题解:二分答案

考虑 check,假设检查的答案为 \(mid\),一个显然的性质,当处于第 \(i\) 个任务的时候,一定有一个人在 \(a[i]\) 位置上,所以我们通过 \(set\) 维护另一个人可能在的位置,如果另一个人没有位置,说明答案不合法

复杂度:\(O(nlog^2n)\)

K. 牛镇公务员考试

image-20240208175419138

题解:基环树 + 拓扑排序求环

容易发现对于一条链来说,只要其中任意一个题目的答案确定了,那么这条链上所有题目的答案就确定了

所以对于一个环来说,容易产生矛盾

然后我们将题目抽象为给定 \(n\) 个点和 \(n\) 个有向边的可能不连通的图,由于每个点都有一个出边,所以每个连通块一定是一颗基环树,也就是说每个连通块中一个有且只有一个环,我们只要把所有的环找出来,不在环上的一定不影响答案,然后在环上任意找一个起点,跑 \(5\) 次,数一下没有产生冲突的次数

那么答案就是所有环上没有冲突次数的乘积

然后问题就转化为求环,然后在环上检查合法性了

posted @ 2024-02-08 18:05  Zeoy_kkk  阅读(26)  评论(0编辑  收藏  举报