欢迎光临散文网 会员登陆 & 注册

复盘|第78场双周赛

2022-11-25 20:30 作者:UCLmsc  | 我要投稿

找到一个数字的 K 美丽值

【模拟】枚举所有长为 k 的子串。

【数学】不断取最低的 k 位数字,判断后,去掉末尾数字,不断循环直到不足 k 位数字。

分割数组的方案数

【枚举 + 前缀和】枚举所有分割位置,找到其中的合法分割。

也可以不计算右边,左边×2如果大于总和等同于左边大于右边。

毯子覆盖的最多白色砖块数

【排序 + 双指针】tiles按左端点l_i排序后,枚举毯子的摆放位置,计算毯子能覆盖多少块瓷砖。毯子右端点放在一段瓷砖中间不如放在瓷砖右端点,因此可以枚举每段瓷砖的右端点来摆放毯子的右端点。双指针,left需要满足其指向的那段瓷砖的右端点被毯子覆盖,设毯子右端点在瓷砖段i上,则毯子左端点是tiles[i] [i] - carpetLen + 1,left需要满足tiles[left] [1] ≥tiles[i] [1]−carpetLen+1。如果毯子左端点在tiles[left]内部,覆盖的瓷砖数还需要额外减去这段瓷砖没被覆盖的部分,即减去(tiles[i] [1]−carpetLen+1) - tiles[left] [0]。

最大波动的子字符串

【DP】最大波动值只有s中两种字符决定,但不确定是哪两种,所以可以枚举这两种字符的所有可能值,从26个小写字母中选两个一共A(26,2) = 26*25 = 650种组合。将出现最多的字符视为1,出现最少的字符视为-1,其余字符视为0,本题就类似 最大子数组和问题了。ab必须都出现在子串中,用diff记录ab出现次数之差,初始值为0,用diffwithb记录包含b的a和b出现次数之差,初始为-∞。遍历s,遇到a,diff和diffwithb都加以,遇到b,diff - 1,diffwithb = max(0, diff)。ans = max(diffwithb),s只有一种字符则ans=0。注:遍历s的时候可以把s[i]当作a或b,减少枚举次数。


复盘|第78场双周赛的评论 (共 条)

分享到微博请遵守国家法律