社区讨论
如果顺序有问题怎么办(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 条回复,欢迎继续交流。
正在加载回复...