神奇问题咨询

P1228 地毯填补问题

SadLava @ 2019-10-19 08:48:51

本题递归函数用int就能过,long long就会玄学错几个点,这是不是跟移位运算有关呢?

又或者是递归函数的原因?

#include <bits/stdc++.h>

using namespace std;

#define ul dfs(zx+l-1,zy+l-1,zx,zy,l);//递归做左上角
#define ur dfs(zx+l-1,zy+l,zx,zy+l,l);//递归做右上角
#define dl dfs(zx+l,zy+l-1,zx+l,zy,l);//递归做左下角
#define dr dfs(zx+l,zy+l,zx+l,zy+l,l);//递归做右下角
//dfs的参数换成long long就烂
void dfs(int x,int y,int zx,int zy,int l){
    if(l==1) return;
    l>>=1;
    //左上角 
    if(x-zx<l&&y-zy<l){
        //输出 
        printf("%d %d 1\n",zx+l,zy+l);
        //按定理处理大方块
        dfs(x,y,zx,zy,l);//继续把有人的区块填满
        ur
        dl
        dr 

    }
    //右上角
    if(x-zx<l&&y-zy>=l){
        //输出 
        printf("%d %d 2\n",zx+l,zy+l-1);
        //按定理处理大方块
        ul
        dfs(x,y,zx,zy+l,l);//继续把有人的区块填满
        dl
        dr 
    }
    //左下角
    if(x-zx>=l&&y-zy<l){
        //输出 
        printf("%d %d 3\n",zx+l-1,zy+l);
        //按定理处理大方块
        ul
        ur
        dfs(x,y,zx+l,zy,l);//继续把有人的区块填满
        dr 
    }
    //右下角 
    if(x-zx>=l&&y-zy>=l){
        //输出 
        printf("%d %d 4\n",zx+l-1,zy+l-1);
        //按定理处理大方块
        ul
        ur
        dl
        dfs(x,y,zx+l,zy+l,l);//继续把有人的区块填满
    }
}

int main()
{
    long long k,x,y;
    scanf("%d%d%d",&k,&x,&y);
    dfs(x,y,1,1,1<<k);
    return 0;
}

蒟蒻求解


by Cola @ 2019-10-19 09:18:46

@SadLava 你printf("")里应该用lld,不是d


by Cola @ 2019-10-19 09:19:11

不然强制转换会出锅的


by Cola @ 2019-10-19 09:20:25

printf("%lld",(long long)????);

printf("%lld",(int)????);转换有锅


by SadLava @ 2019-10-19 11:12:22

@Cola 原来如此...谢大佬


上一页 |