Codeforces Round #361 (Div. 2)

ACM贴吧里有红/黄名会更cf、tc的题解,有需要的可以去看看

相关代码可以直接cf上找aynuzzh
虽然只是一个蓝名都不到的弱鸡选手233333

A

这里写图片描述
有这么一个手机按键,你去拨一串数字(不重复),看有没有可能拨错。比如12的话可能拨成45、78、23.。。。例如37就不会拨错。
个人做法是存储各个数字位置,比如1是1,1。9是3,3。然后记录每个按键与前一个按键所移动位置。第一个就不用比较了。然后第一个按键0-9看有没有可以的(除掉第一个按键相同情况)。

B

大意可以看做一个坐标轴由1到N,问1到1,2,3…..N每个点需要移动最小步数,有两种移动方式,一种就是移动一步,左或右移动一个位置。第二种就是每个点给定a[i](a[i]>=i)可以移动一步到a[i]。
个人做法用b[i]记录各个点到1的最小步数(初始为i-1)。是从1到N扫一遍,如果这个点移动到a[i]点的最小步数小于b[a[i]]。 则改变b[a[i]]的步数,并从b[a[i]]向左扫,看是否从b[a[i]]向左步数更少。

C

有四个小偷偷东西,每个小偷可以装N重量东西。并且每个小偷偷的东西是前一个人K倍。问小偷偷东西方案为M时,N最少重量是多少,如果不符合,输出1.

我们可以假设四个小偷偷的东西分别为(a,ak,ak^2,ak^3)。只需要算偷东西最多ak^3最小即可。于是可以二分答案N,区间1-10^16即可,看ak^3<=N偷的方案数。

D

给你两组长度为N的序列a[i]、b[i]。 问有多少个区间[l,r]使得a在区间最大值等于b在区间最小值。

建立线段树分别维护a区间最大和b区间最小。从1到n扫一遍为l的值,由于a递增,b递减。所以可以二分r的值,求出r1,r2为r的范围。我写法比较蠢,二分两次,第一次求r1,第二次求r2……

E

如果有什么想法…..之后再补。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值