Codeforces Round #600 (Div. 2) (A-D)

Codeforces Round #600 (Div. 2)

A
给处两个序列,问是否存在一段连续的区间使得在这两个序列中元素的差值相同,存在两个及以上则输出-1。
做起来做的很丑。。打的时候写了20min才过。。太菜了。。
AC办法是前后找第一个和最后一个不同的元素位置即可,再遍历一遍left到right不断比较中间的元素是否差值都是一样就可以了。

B
写假了的模拟题。。。。System test被卡掉了。。D题也差一点点所以狂掉50分。。

和南昌热身赛最后一个图的问题在答案构造上类似,不需要最优的构造答案,只需要方便好做并且满足题目要求即可。这道题标答里的贪心办法是,办公室只要人空就进入下一天,这样子就不用再去开set云云考虑某个人今天有没有进入办公室了。

C
首先按照权值排序尽可能倒序排序显而易见。
但最开始想错了,以为是从下往上处理,不断地添加甜食堆满每天的空位。
事实上每新加一个甜食,是从第一天插入,而将后面的甜食都挤下去一位,有些甜食不会被挤到第二天,而有些会被挤到第二天从而权值加一。那么可以仅考虑第一天的变化情况,因为如果第一天的某个甜食被挤到第二天去了,那么该甜食下标减去 k m ( k = 1 , 2 , . . . ) km (k = 1, 2, ...) km(k=1,2,...)的甜食一定也会被挤下去。所以我们跨度为m的预处理每一个甜食如果被挤下去总共会多花费的代价即可。

D
因为B写的烦的一比(最后还wa了),C也写假了很久,所以最后只剩下十分钟写D。
不过看起来D题只需要用并茶几维护联通性,以最大元素作为根节点(倒序遍历节点建图即可),同时维护每一个联通块中最小的元素就可以近似 O ( n ) O(n) O(n)的做出来了。
有点可惜的是当时最后有点意识模糊,在维护最小元素的时候将merge的两个元素 x 、 y x、y xy的最小值做了 m i n min min,而不是将两个 r o o t root root的最小值做了 m i n min min
赛后改了这一行代码后惨提AC…(tmd)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值