小白月赛 120 出题人题解

A 牛牛的串串

用一个 map 维护字母出现次数,遍历 map 判断第二元是否依次加 1 即可。 时间复杂度:

牛牛的合数

特判 的无解。

反之大于 的偶数一定是合数,所以 为奇数输出 为偶数输出 即可。

牛牛的排列

分类讨论:

特判 时无解。

  • 为奇数,构造 即可
  • 为偶数,构造 即可

牛牛的子序列

每一个元素独立。

首先将 中每一段相同元素视作一个整体,然后贪心匹配,若 或者 的数量比 多则无解。

反之这一段的操作次数为

总操作次数就是每一段操作次数的最大值。

使用双指针维护合并,时间复杂度:

牛牛的约数

实际上这个问题约束很弱。

将原序列升序去重后,对于每个元素,如果直接枚举 ,就是 的。

而如果 开始枚举到 ,容易发现是很快就会找到解的,容易证明一个宽松的上界:,因为如果 ,那么 的答案就是 ,反正 跑暴力,最多跑 次暴力。

不过出题人认为远远达不到这个上界,但是不会证明更紧的上界。

以及一些其它的神秘写法,可能都是对的,而非错的。

牛牛的三角形

古典概型,计算合法方案数除以总方案数即可。容斥,合法方案等于总方案减去不合法方案。

根据三角形三边之和大于第三边性质,容易发现,若将选出来的边长升序,得到的相邻两个数的间距至少是一个斐波那契数列。

打表可得斐波那契数列在第 17 项后就会超过 1500,所以 时总是合法。

反之 dp 选出来的数即可, 表示 选出来 个数,上一个数是 的方案数,前缀和优化转移即可。

时间复杂度:

全部评论
F 可以做到 O(16 * 16 * n). 考虑构造非法集合,必定是在长度为 m 的 fib 序列上进行增量。 令 g_1 = f_1 + c_1, g2 = f_2 + c_2, 递推 g_m = g_{m - 1} + g_{m - 2} + c_n, 则得到最终 g_m = f_{m - 1} + sum f_i c_i ,即要求 g_m <= n 即可。 方案数即 c_i 的合法解,通过完全背包算出 恰好 的方案数,前缀和即可。
7 回复 分享
发布于 09-05 21:42 江苏
E鉴定为单调栈,先排序去重,当前的数能被栈顶整除就弹出(栈顶的数不优于当前数),最后如果空了就是-1,否则栈顶就是当前答案,时间复杂度O(n)
4 回复 分享
发布于 09-05 23:12 河北
E可以证明排序后第i个数要找的范围仅为[l,i-1],其中l为最近的ans[]设为-1的位置。 ans[l]= -1代表前l-1个数都是a[l]的因数,如果a[i]不整除a[l],答案为l,否则a[1~l-1]必定能被a[i]整除。a<=1e18,[l,i-1]的长度最长为64,复杂度64n
点赞 回复 分享
发布于 09-06 10:28 北京
E题有不依赖结论的解法。按从小到大的顺序依次填入a_i,线段树维护区间lcm,那么第一个满足a_i%lcm(1,…,j)!=0的j就是所求的一个j。注意lcm超过1e18要特判。复杂度两个log。
3 回复 分享
发布于 09-05 21:42 上海
E 数据水了
点赞 回复 分享
发布于 10-07 22:49 浙江
E题应该是这样,先选出一个数x,前一半是x的因子,后一半是x的倍数,因子的数量是sqrt(x)级别的,倍数的数量是X/x级别的。严格意义上,这题的时间复杂度是n方的,只是你数据水了,并且x的因子数量实际上到不了sqrt(x),导致这题可过而已。。。。。。
1 回复 分享
发布于 09-05 21:28 香港
牛牛的约数???看了和看了一样(真正的正解是啥?)
点赞 回复 分享
发布于 09-05 21:21 湖南
qp
点赞 回复 分享
发布于 09-05 21:19 湖南
qp
点赞 回复 分享
发布于 09-05 21:16 广东

相关推荐

10-10 00:14
门头沟学院 Java
程序员小白条:20年架构师,无工资
点赞 评论 收藏
分享
迷茫的大四🐶:那你问他上班之后老实了没
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务