Gravatar
Benjamin
积分:1054
提交:405 / 658

题解原作者:2017级吴昊钟 NOI2019铜牌

难度:普及+/提高

算法一:暴力枚举

在 $[ 0,n ]$ 的范围内暴力枚举 $m$ 的取值,直接统计 $[m,n]$ 之间的数中 $0$ 出现的次数为 $k$ 的最大 $m$ 的值。

时间复杂度:$O(N^2)$

期望得分:$30$分

算法二:前缀和+扫描法

在 $[0,n]$ 的范围内扫描,每一次进位使用类似高精度加法的方式维护 $0$ 出现的次数的变化情况,选取 $sum(n)-sum(m-1)$ 的值为 $k$ 的最大 $m$ 的值。

时间复杂度:$O(N)$

期望得分:$50$分

算法三:前缀和+组合计数

利用加法原理和乘法原理可以直接计算出 $f(n)$ 为 $[0,n]$ 之间的数中 $0$ 出现的次数,从 $n$ 开始倒序扫描选取第一个 $sum(n)-sum(m-1)$ 的值为 $k$ 的 $m$ 即可。也可以将算法二倒序维护解决。

时间复杂度:$O(N-M)$

期望得分:$70$分

算法四:二分法+前缀和+组合计数

在前一个算法的基础上利用二分法快速索引满足条件的 $m$ 的最大值即可。

时间复杂度:$O(log_{2}N)$

期望得分:$100$分


题目2949  [SYOI 2018] WHZ 的数字      9      评论
2022-10-18 18:34:33