题解 | 牛客小白月赛40
怎么感觉小白月赛的难度越来越低了
看错题,手速慢了,痛失公仔
A 数字游戏
按照题意模拟即可,每次取最高位可以不断用减去最低位,直到剩下最高位 每次操作是的,最多操作次,因为位运算常数小,所以可以通过
B 跳跳跳
首先发现在任意时刻,已经跳的区间都是一个联通块(区间)
直接正向考虑区间dp并不是很好做(其实可以,是我降智了),我一开始的想法是反过来,因为操作是可逆的,反过来跳的也是一个区间
所以考虑把数组复制一份,贴在原数组后面
设表示区间的答案
转移十分简单
len表示的是区间长度
时间复杂度
代码实现用记忆化搜索比较好写
C 数字匹配
这题看错了5次题,直接导致我痛失rank1
首先如果的最大重合位数,那么一定存在重合位数的子串
于是我们枚举
类似hash的思想
把的每位的值都***一个桶里面,然后把的每位得到的值都查一下看看存不存在
看代码应该会比较好理解
D 优美字符串
显然如果原字符串相邻两个如果是一样的,在这两个中间插一个不同的即可
所以答案是原长+相邻两个一样的个数
E 分组
最多最少,一看就是二分答案
二分最多的小组的人数,然后分组看看组数是否即可
时间复杂度
F 过桥
本来以为是什么数据结构优化建边,结果发现数据范围才
考虑每个点能连向的是一个区间,暴力连边即可
把边反向,从开始跑,最后看即可
如果数据范围是就要考虑线段树优化建边了
G 空调遥控
因为不大,我们可以枚举
那么进入训练状态的人的区间就是
用前缀和计算即可
H 来点gcd
看错题卡了一年
如何判断一个数能不能选出若干数使得
首先选出来的数一定是的倍数(显然)
然后要让集合gcd是,那么显然是倍数的全部都选才越有可能是,(因为是一路取gcd)
所以枚举(不一定要出现过),然后在枚举它的倍数,如果出现过就和已选的取个
是个调和级数
时间复杂度 code
I 体操队形
首先考虑把连向表示必须要在之前
连出来一定是一个图
答案就是序数量
这个问题是的,没有多项式复杂度算法,怎么办啊
一看数据范围,指数级算法爆搜即可
看我写的这么认真,要个赞不过分吧