Codeforces Round #211 (Div. 2)

A题:将一个数字在算盘上表示。
解题思路:算盘也是10进制的,所以就很简单了,当然不是10进制就稍微改一下好了。
代码:
B题:求一个数列中,连续k个数的和最小的一段的其实端点。
解题思路:预处理前缀和,然后暴力枚举过去就好了。
代码:
 
   
C题:一个字符串,不允许出现连续的三个相同的,或者连续两次出现两个相同的字符,尽量少的删除字符,输出删除后的字符串。
解题思路:贪心,用另一个数组存当前为止能放的,那么什么是不能放的呢?如果已经放进去的最后的两个等于当前这个,就不放,如果已经放进去的最后一个等于当前这个,且最后第二个等于最后第三个,不放。
代码:
D题:n个小伙伴去买自行车,老板一共有m辆车,第i个小伙伴们的口袋里有私有的钱为b[i],第i辆自行车的价格为p[i],小伙伴们还有一个公共的资金为c,小伙伴们可以拿自己的私有的钱和公共资金买车,但不能把自己的私有的钱给别人,每个小伙伴最多买一辆车,问最多能买几辆车,在保证能买的车尽量多的情况下,小伙伴们私有的钱最少会花去多少?
解题思路:给车按价格从小到大排个序,求个前缀和sum[i]。假设我们知道能买下k辆车,那我们肯定拿最便宜的k辆吧,小伙伴们买这k辆车所花的私有的钱最少便是max (0,sum[k]-c),所以关键是我们怎么知道最多能买几辆了。能买i+1辆,则必然能买i辆吧,所以这里就有个单调性了,二分一下答案。那么怎么判断当前的二分值(二分值为k,也就是要买k辆车)是否可行呢?我们让小伙伴们最有钱的去买最贵的车,不够的用公共资金补贴,这样才能达到尽可能多的买,如果能买完这k辆(也就是最便宜的k辆),那么这个k就是可行的。
代码:
 
      
E题:还不会,有会做的大牛留个言吧,多谢指教了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值