Codeforces Global Round 28 / cf contest 2048 题解

比赛链接

A. Kevin and Combination Lock

观察操作
难度(个人感觉)★☆☆☆☆

注意到两个操作都不改变 %33 的值,因此要求原数 %33==0, 显然这是充分的。

B. Kevin and Permutation

观察操作
难度(个人感觉) ★☆☆☆☆

一个点的 "势力范围" 是以 [p,p+k) 为右端点的这些区间。从小到大枚举 1n,从左到右铺满右端点区间 [k1,n) 就行,铺不下的数位置随便选。

C. Kevin and Binary Strings

观察操作,优化
难度(个人感觉)★★☆☆☆
其中一个区间是 [1,n] ,否则结果小于 2n1
考虑暴力另一个区间,时间复杂度 区间数 * 比较代价 = O(N2)O(N)=O(N3)
可以要求左端点一定是 1,并且左端点要去异或的位置必须是 0,那么固定右端点时,左端点显然越左越好。那么时间复杂的变成了 O(N)O(N)=O(N2)

D. Kevin and Competition Memories

观察操作,贪心
难度(个人感觉)★★☆☆☆

发现对于一场比赛,排名只和比自己 rating 高但是题目数一样的人有关,找到第一个自己做不了的题目,rank 比自己好的即能做这道题的人的人数。

对于每个自己做不了的题目,处理出能做这道题的人数 num。对于自己能做的题目,可以等价转换为所有人都做不了的题目,把 num 设为 0。那么一场比赛的 rank 即所有题目的 num 最大值 +1

对每个k,
排序后去除最大的 m%k 个值,那么最优 rank 是第 k 小,第 2k 小,. . . , 第 m/kk 小的值。容易发现每个值都不可能更优。

E. Kevin and Bipartite Graph

构造
难度(个人感觉)★★★☆☆

通过边的上界,考虑不可行的情况。 上界是 n(2n+m1),后半部分是森林的最大大小,即树的形态。要求连 2nm 条边,要求 2nmn(2n+m1),即 m2n1

考虑构造,uv 的边,颜色是 (vu)%2n/2即可。

验证正确性是简单的。为什么这么构造我也不知道(哭)
可以通过 m=2n1 的情况尝试,并且分配要尽可能均衡,那么每种颜色,每个右边的点,建议分配 2 条边。比较合理的想法是循环分配,对于下一个右边点点,建议偏移一格。

F. Kevin and Math Class

笛卡尔树,dp,优化
难度(个人感觉)★★☆☆☆

区间最小值,显然尽可能往 左/右 扩展,建出笛卡尔树。

信息有两个:当前最大值,操作次数,将操作次数作为状态进行 dp 即可。

注意并不是所有转移都是有用的,我们希望找到最小的 max,那么可以双指针记录操作次数 i,j,每次将 max 较大的那个部分的操作次数增加,这样 max 才有可能减少。正确性是显然的,可以发现任意一个 x 作为 max,我们用的步数都是最少的。如果不做优化,TLE 的可能是不小的

未完待续
posted @   陈聂  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示