Codeforces Round #600 (Div. 2)

A. Single Push

给两个等长的数组A和B,问数组A中L到R中的元素(1 \leq L \leq R \leq n)都加上同一个值K是否能得到数组B?如果是,输出YES;否则,输出NO。

题解:

分类讨论:

  1. B[i]-A[i]的值有负数的话,输出NO
  2. B[i]-A[i]的值都是正数,找出最左边的非0的值的位置L和最右边的非0值的位置R。如果全部为0,输出YES
  3. 判断L和R中的B[i]-A[i]是否全部相同。如果全部相同,输出YES;否则,输出NO

可惜比赛的时候竟然写错了。T_T

B. Silly Mistake

数组A表示办公室的出入记录。i 表示人员 i 进入办公室,-i 表示人员 i 离开办公室。每个人同一天只能进入办公室一次,同一天一定有时间办公室是空的,最后办公室也一定是空的。问可以把数组A分为多少天,并且输出每天人员进出办公室的次数?

题解:

在同一天进行对人员 i 标记,i 的初始标记值为0,办公室内人员数量为0;进入办公室之后 i 的标记值变为 1(判断 i 的标记值必须是 0),办公室内人员数量+1;离开办公室之后 i 的标记值变为2(判断 i 的标记值必须是 1),办公室内人员的数量 -1;如果标记值出错了,输出-1跳出即可。当办公室人员的数量为0时,记录进出人员的数量,并更改标记值为0.

C. Sweets Eating

有n个糖果,每个糖果的甜度是A[i],糖果惩罚=甜度*权值(初始权值是1,每吃m个糖果之后权值+1)。问当吃1到n个糖果时,糖果惩罚的最小值。

题解:

很明显的是,甜度高的糖果先吃,甜度低的糖果后吃;然后,会发现当计算ans[i]=ans[i-1]+A[j](j=i,i-m,i-2m,i-3m,……),如果直接计算的话会超时,所以继续优化;可以发现计算 A[ j ] 和的过程是耗时最久的,所以再定义一个数组num,num[ i ] = num[ i - m ]+A[ i ]。此时ans[i]=ans[i-1]+num[i]。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值