洛谷P1228 地毯填补问题

我也是服了,这道题加上我拖延,竟然整整写了一天!
不过幸好还是写出来了,这题也不太好理解
用分治的思想,真就把一个复杂的问题,一步一步拆成了小问题解决了!
首先,如果是2x2的格子最简单,不管在哪里,都有一种地毯填补;不管是4x4还是8x8,都能拆分成很多个2x2。
所以我们要做的就是先判断(x,y)在哪里方向,(比起判断0<x<len,好像的确用x-a,y-b更简便些)确定之后就能确定一个地毯,将这个地毯的三块分别看作公主站位,递归解决对应方向的所有格子
上图:
在这里插入图片描述
输出的坐标,x,y,a,b转换后的坐标很容易出错(哭

void dfs(ll x,ll y,ll a,ll b,ll len) {
   
    if(len<1) return;
    if(x-a<=len-1&&y-b<=len-1) {
   
        cout<<a+len<<' '<<b+len<<' '<<1<<endl;
        dfs(x,y,a,b,len/2);
        dfs(a+len-1,b+len,a,b+len,len/2
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值