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
初赛党表示“不看不看我不看”