Codeforces Round 859 (Div 4) 总结

文章目录

文章首发于我的个人博客:欢迎大佬们来逛逛

Dashboard - Codeforces Round 859 (Div. 4) - Codeforces

A

直接 + 或者 - 模拟即可。


B

分别计算偶数的总和奇数的总和,然后比较偶数的和是否严格大于奇数的和即可。


C

题目要求把由 26 个字母组成的字符串转换为 01 串,要求统一个字母对应的 0或者1的情况是唯一的。

也就是说如果字母a第一次出现,并且对应一个0或者1,则后面所有的a都是与之对应的。

利用哈希表可以维护某个字母对应的0或者1 ,也可以使用array<int,26>来模拟。

并且维护一个随着每个位置变换的pre,每次pre^=1,并且把这个pre映射到当前字母所在的哈希表中,如果往后到某个字符出现在哈希表中,但是其对应的字母却与pre不一致,则说明一定无法构成01串。


D

题目要求是有几个询问,然后给出 l,r,num,让我们把[l,r]的数字都改为num,然后计算整个序列中所有元素之和。

利用前缀和presum维护即可。

则每次的更新就是 p r e s u m [ r ] − p r e s u m [ l − 1 ] + ( r − l + 1 ) ∗ n u m presum[r]-presum[l-1]+(r-l+1)*num presum[r]presum[l1]+(rl+1)numdi


E

交互题,直接跳过


F

题目要求:一个小球在地图上移动,每次碰到墙壁都会反弹,每次碰到角落都会逆着往回走,给定一个终点,询问经过几次碰撞可以到达这个终点。

小球一共可以移动 4nm 个状态 ,因此我们建立一个这样的数组,并且对方向进行一个合适的判断,例如我们分别设:DL UL DR UR 为 0,1,2,3

这样我们就可以方便的进行如下的更新:

  • 四个边界的判定,记录碰壁的次数。
  • 移动的过程中小球的位置更新。

并且每次移动我们都记录这个位置的状态被保存过,如果第二次访问过了这个状态,则说明是回路。

如果我们到达了终点,则输出碰壁的次数。


G1, G2

题目要求:给你一个目标数组,问你是否能只通过一个原始{1} a数组来合成,合成的原因是a数组的子序列和可以作为新的元素插入。

我们给目标数组进行排序,如果它的某位置元素大于这个位置之前的所有元素之和,则表示这个元素无论如何也不可能得到,它后面的元素更不要说了。

因此排序后记录前缀和然后依次比较即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuleo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值