神奇问题咨询

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 SadLava @ 2019-10-19 08:50:13

说错了,不是错几个点,是输出的结果中大部分是对的有个别数字不对


by bigbigdoggy @ 2019-10-19 08:51:29

初赛党表示“不看不看我不看”


by xzy062609 @ 2019-10-19 08:53:11

初赛党表示“不看不看我不看”


by SadLava @ 2019-10-19 08:55:30

我也要去初赛啊只是这个东西昨天做了今天顺便整了


by bigbigdoggy @ 2019-10-19 08:56:36

我试了,玄学地全错了


by bigbigdoggy @ 2019-10-19 08:56:55

@SadLava


by SadLava @ 2019-10-19 08:57:56

@assassinRay 所以究竟是什么情况


by zhangboju @ 2019-10-19 08:59:04

初赛党表示“不看不看我不看”


by SadLava @ 2019-10-19 08:59:15

还有用long long的时候本地是能过的


by Cola @ 2019-10-19 09:17:48

初赛党表示“不看不看我不看”


| 下一页