2021.5.18(cf)考试后的第一篇总结

1.cf C. Bouncing Ball

https://codeforces.com/contest/1457/problem/C

大意:有一个01字符串,1代表可走,0代表不可走。给出从第几个开始,然后每步+k,每次可以进行两个操作,将0变成1花费x,把第一个字符删除花费y,当然删除之后编号也会改变。

第一行输入n,p,k,(1<=p<=n<=1e5,1<=k<=n)代表字符串的长度,从第几个开始走,每次走的间隔。

接下来一行输入01字符串,接下来一行输入x,y代表操作1,2花费的价值。求最小价值。

思路:首先一步一步来,还是先想最后一步,仔细想想就会发现,跳出去之前的那一步无非是从n-k+1~n这几个可能,那么上一步呢?很容易想到,-k或者直接把上一步的点作为第p个,把之前的删除。所以答案就出来了,遍历n-k+1,n的点,然后往前一次-k,每次都计算下把前面删除的总花费,维护最小值。注意当j<=p结束第二层循环。

总结:还是利用逆向思维,先想最后的状态是什么?然后思考最后一步怎么来的。

2.D. XOR-gun

https://codeforces.com/contest/1457/problem/D

大意:给定一个长度为n的非严格单调递增的序列,(2<=n<=1e5),每次选择两个相邻的数,用它们的异或值代替这两个数,求破坏递增性的最小操作步数。

思路:这题真的巧妙啊,首先对于连续三个数,二进制位最高位相等,那么必定可以通过操作一步从而满足题意(即选择靠后的两个数,因为最高位异或变成了0,所以必定小于前面的那个),注意到a[i]最大是1e9,也就是说,二进制最多有31为,因为是有序的序列,最坏情况下是每连续两个数的最高二进制位数相同,这时候n最多64个,所以当n>64时,必定会出现连续三个数的最高二进制位数是一样的,直接输出1,当n<=64时,直接暴力枚举就行了。如果能通过一定操作,符合题意那么对于出现a[i]>a[i+1]的这两个值,一定是连续的某个区间来的,所以枚举区间,每个区间三种情况,该区间完全异或和a[l-1]比,和a[r+1]比,该区间前后某两段异或后比。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值