codeforces 1608

codeforces 1608cf1608D这类题套路就是先按一维排序,按着一维搞另一维。第一维排序以后倒着做,预处理第二维前缀最大值,i能屠场的条件是第二维前缀最大值>(i,n]中能屠场的位置的第二维最小值,一开始当成最大值,wa了几次……...
摘要由CSDN通过智能技术生成

cf1608C
这类题套路就是先按一维排序,按着一维搞另一维。
第一维排序以后倒着做,预处理第二维前缀最大值,i能屠场的条件是第二维前缀最大值>(i,n]中能屠场的位置的第二维最小值,一开始当成最大值,wa了几次……

cf1608D
观察以后发现最后要么全01,要么全10,要么有相同数量的00,11,然后10和01随便。这不就是相同数量的0和1的方案数-同时只有若干10和若干01方案数……

cf1608E
一开始没看到边平行于坐标轴以为是计算几何题差点放弃
枚举三种颜色选择顺序发现所选的点一定只有3种情况
1.横着排列的三个矩形
2.被T的三个部分分成了上面一个矩形下面两个矩形
3. 1和2的旋转,这里注意1只需要旋转一次,2旋转4次(自己YY一下)由于只需要知道点之间的相对顺序不在乎在坐标中的顺序,rotate直接把(x,y)变成(-y,x)就行
这时候第一种很直接的办法就是二分k然后 1的话从左边选最靠左的k个第一种颜色,右边最靠右k个第三种颜色,然后看中间是否有k个第二种颜色;2的话从上往下选最考上k个第一种颜色,然后下面的部分从左往右选k个第二种颜色看右边是否有k个第三种颜色,考虑常数的话O(36nlogn)
这里用一种很套路的方法,考虑常数的话O(36n+nlogn)
挺套路的two pointer,按颜色内x排序以后,1的话直接two pointer从第一个颜色和第三个颜色像中间扫,同时看中间满足的第二种颜色是否有足够多;2的话一开始T上面的一横假设在顶端,然后一个一个往里面加第一个颜色,同时下面把第二种颜色和第三种颜色分别从左和从右往中间添加,每次添加第一种颜色相当于把T上面的一横向下移,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值