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

复盘|第357场周赛

2023-08-08 22:26 作者:UCLmsc  | 我要投稿

故障键盘

【双端队列】遇到'i'时看作是把字符添加到开头,没有遇到则添加到末尾,最后判断是否需要反转后输出答案,时空复杂度均为O(n)。

判断是否能拆分数组

【枚举】当n≤2时必然满足,当n≥3时,只要nums中存在和≥m的长为2的子数组,那么除了这个子数组之外的元素可以被一个一个地去掉,最后剩下这个子数组再拆掉。所以问题转化为数组中是否有两个相邻元素之和≥m。

找出最安全路径

【多源BFS + 并查集】从所有1出发写一个多源BFS,计算每个格子(i,j)到最近的1的曼哈顿距离dis[i] [j],由于答案不会超过dis[i] [j]的最大值所以可以倒序枚举答案。设答案为ans,把所有dis[i] [j] = ans的格子和他四周>=ans的格子用并查集连起来,答案为ans的情况下,这些格子间可以互相到达,用并查集判断(0,0)和(n-1,n-1)是否联通,只要联通就立刻返回ans。

子序列最大优雅度

【贪心】按照利润从大到小排序。先把前k个项目选上。考虑选第k+1个项目,为了选它,我们必须从前k个项目中移除一个项目。由于已经按照利润从大到小排序,选这个项目不会让totalprofit变大,所以我们重点考虑能否让distinct.categories变大。分类讨论:如果第k+1个项目和前面某个已选项目的类别相同,那么无论怎么移除都不会让distinct_categories变大,所以无需选择这个项目;如果第k+1个项目和前面任何已选项目的类别都不一样,考虑移除前面已选项目中的哪一个:如果移除的项目的类别只出现一次,那么选第k+1个项目后,distinct_categories一减一增,保持不变,所以不考虑这种情况。如果移除的项目的类别重复出现多次,那么选第k+1个项目后,distinct_categories会增加一,此时有可能会让优雅度变大,可以选择这个项目。按照这个过程,继续考虑选择后面的项目。计算优雅度,取最大值,即为答案。


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

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