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 原来如此...谢大佬