社区讨论

如果顺序有问题怎么办(c++)(玄关)

P1228地毯填补问题参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m6083brw
此快照首次捕获于
2025/01/17 11:51
去年
此快照最后确认于
2025/11/04 11:27
4 个月前
查看原帖
rtrt 代码如下 (解析:leftup为左上,rightup为右上,leftdown为左下,rightdown为右下)
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=(2 <<10 )+5;
long long k,gx,gy;
long long mp[N][N];
void fn(long long gzx,long long gzy,long long large,long long qdx,long long qdy){
	if(large==1){
		return ;
	}
	if(gzx <=qdx+(large/2)-1&&gzy <=qdy+(large/2)-1){ //leftup
		fn(gzx,gzy,large/2,qdx,qdy);//leftup
		fn(qdx+(large/2) , qdy+(large/2)-1 , large/2 , qdx+(large/2) , qdy );//rightup
		fn(qdx+(large/2)-1 , qdy+(large/2) , large/2 , qdx , qdy+(large/2));//leftdown
		fn(qdx+(large/2) , qdy+(large/2) , large/2 , qdx+(large/2) , qdy+(large/2));//rightdown
		cout<< qdx+(large/2) << " " << qdy+(large/2) << " " <<1<<endl;
	}
	if(gzx >=qdx+(large/2)&&gzy <=qdy+(large/2)-1){ //rightup
		fn(qdx+(large/2)-1 , qdy+(large/2)-1 , large/2 , qdx , qdy);//leftup
		fn(gzx , gzy , large/2 , qdx+(large/2) , qdy);//rightup
		fn(qdx+(large/2)-1 , qdy+(large/2) , large/2 , qdx , qdy+(large/2));//leftdown
		fn(qdx+(large/2) , qdy+(large/2) , large/2 , qdx+(large/2) , qdy+(large/2));//rightdown
		cout<< qdx+(large/2)-1 << " " << qdy+(large/2) << " " <<2<<endl;
	}
	if(gzx <=qdx+(large/2)-1&&gzy >=qdy+(large/2)){ //leftdown
		fn(qdx+(large/2)-1 , qdy+(large/2)-1 , large/2 , qdx , qdy);//leftup
		fn(qdx+(large/2) , qdy+(large/2)-1 , large/2 , qdx+(large/2) , qdy );//rightup
		fn(gzx , gzy , large/2 , qdx , qdy+(large/2));//leftdown
		fn(qdx+(large/2) , qdy+(large/2) , large/2 , qdx+(large/2) , qdy+(large/2));//rightdown
		cout<< qdx+(large/2) << " " << qdy+(large/2)-1 << " " <<3<<endl;
	}
	if(gzx >=qdx+(large/2)&&gzy >=qdy+(large/2)){ //rightdown
		fn(qdx+(large/2)-1 , qdy+(large/2)-1 , large/2 , qdx , qdy);//leftup
		fn(qdx+(large/2) , qdy+(large/2)-1 , large/2 , qdx+(large/2) , qdy );//rightup
		fn(qdx+(large/2)-1 , qdy+(large/2) , large/2 , qdx , qdy+(large/2));//leftdown
		fn(gzx , gzy , large/2 , qdx+(large/2) , qdy+(large/2));//rightdown
		cout<< qdx+(large/2)-1 << " " << qdy+(large/2)-1 << " " <<4<<endl;
	}
	return ;
}
int main(){
	cin>>k>>gx>>gy;
	mp[gx][gy]=1;
	fn(gx,gy,2<<(k-1),1,1);
	
	return 0;
	}

回复

2 条回复,欢迎继续交流。

正在加载回复...