p1185 #8RE求助,玄关一
  • 板块学术版
  • 楼主guoshi
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/7/18 08:37
  • 上次更新2023/11/3 09:12:50
查看原帖
p1185 #8RE求助,玄关一
945842
guoshi楼主2023/7/18 08:37
#include<bits/stdc++.h>
using namespace std;
string st[3000];
int n,m,ceng=2,deeth=3,dc[12];
struct node{
	int x,y;
}del[12];
bool cmp(node a,node b){
	if(a.x!=a.x)
		return a.x<b.x;
	return a.y>b.y;
}
void dfs(int x,int y){
	st[x][y]=' ';
	if(st[x+1][y-1]=='\\') dfs(x+1,y-1);         //左上角
    if(st[x+1][y+1]=='/')  dfs(x+1,y+1);         //右上角
    if(st[x-1][y-1]=='/'||st[x-1][y-1]=='o')  dfs(x-1,y-1); //左下角
    if(st[x-1][y+1]=='\\'||st[x-1][y+1]=='o') dfs(x-1,y+1); //右下角
    return;
}
int main(){
	cin>>n>>m;
	st[1]="o   o";
	st[2]=" / ";st[2]+='\\',st[2]+=' ';
	st[3]="  o  ";
	dc[n]=1,dc[n-ceng+1]=deeth;
	while(ceng<n){
		for(int i=1;i<=deeth;i++)
			st[i]=st[i]+' '+st[i];//镜像复制 
		int wl=st[deeth].find("o"),mid=st[deeth].size()/2+1;
		int wr=wl+mid,w=0,len=st[deeth].size();
		while(wl<wr){//开始构造 
			deeth++,wl++,wr--;
			if(wl>=wr) break;
			for(int i=0;i<wl;i++)
				st[deeth]+=' ';
			st[deeth]+='/';
			for(int i=wl+1;i<wr;i++)
				st[deeth]+=' ';
			st[deeth]+='\\';
			for(int i=wr+1;i<len;i++)
				st[deeth]+=' ';
		}
		for(int i=0;i<mid-1;i++)
			st[deeth]+=' ';
		st[deeth]+='o';
		for(int i=mid;i<len;i++)
			st[deeth]+=' ';
		ceng++;
		dc[n-ceng+1]=deeth;
	}
	for(int i=1;i<=m;i++)
		cin>>del[i].x>>del[i].y;
	sort(del+1,del+1+m,cmp);//优先处理右节点,不影响前面的找点 
	for(int i=1;i<=m;i++){
		int x=del[i].x,y=del[i].y,pd=1; 
		int wz=-1,s=0;
		while(s<y){
			wz++;
			if(st[dc[x]].find("o",wz)==string::npos){//该点不存在 
				pd=0;
				break;
			}
			wz=st[dc[x]].find("o",wz);
			s++;
		}
//		cout<<dc[x]<<' '<<wz<<endl;
		if(pd);//该点存在 
			dfs(dc[x],wz);
	}
	for(int i=deeth;i>=1;i--)
		cout<<st[i]<<endl;
	return 0;
}
2023/7/18 08:37
加载中...