P1185 #8 RE 求助
  • 板块学术版
  • 楼主P_ZXY_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/7 16:05
  • 上次更新2024/10/7 18:08:53
查看原帖
P1185 #8 RE 求助
735869
P_ZXY_楼主2024/10/7 16:05

rt.

link.

#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;

struct node{
	int x,y;
}ch[11+4][1145];
bool f,f1[1145141];
char v[1145*3][1145*3];
int q,w,m,n,a1,b1,b2,sum,cnt,a[1145141]={0,1,2};

void goujian(int x){
	int x_1 = x,y = x+a[x-1],y_1 = y,z,z_1;
	for(int i = 1;i <= 2*y-1;i+=6){
		v[y][i] = v[y][i+4] = 'o';
		ch[cnt][++sum].x = y,ch[cnt][sum].y = i;
		ch[cnt][++sum].x = y,ch[cnt][sum].y = i+4;
	}
	--x;
	for(int i = y_1-1;i >= 1;--i){
		if(i == y-(a[x_1-x]-a[x_1-x-1])-1 || i == 1){
			--cnt,sum = 0;
			y = i;
			z = pow(2,x-1);
			for(int j = 1;z;++j){
				if(v[i+1][j-1] == '/' && v[i+1][j+1] == '\\'){
					v[i][j] = 'o';
					ch[cnt][++sum].x = i,ch[cnt][sum].y = j;
					--z;
				}
			}
			--x;
		}else{
			z_1 = 1;
			for(int j = 1;j <= y_1+i;++j){
				if((v[i+1][j-1] == 'o' || v[i+1][j-1] == '/')){
					if(v[i+1][j-1] == '/') v[i][j] = '/';
					else
						if(f1[z_1] && v[i][j-2] != '\\'){
							v[i][j] = '/';
							++z_1;
						}
				}else if((v[i+1][j+1] == 'o' || v[i+1][j+1] == '\\')){
					if(v[i+1][j+1] == '\\') v[i][j] = '\\';	
					else
						if(!f1[z_1]){
							v[i][j] = '\\';
							++z_1;
						}
				}
			}
		}
	}
}

int main(){
	cin >> n >> m;cnt = n;
	for(int i=3;i<=20;++i) a[i] = a[i-1]*2+1;
	for(int i=1;i<=10000;++i) f1[i] = i%2;
	for(int i=1;i<=n;++i) a[i] += a[i-1];
	memset(v,' ',sizeof(v));
	goujian(n);
	for(int i = 1;i <= m;++i){
		cin >> q >> w;v[ch[q][w].x][ch[q][w].y] = 'a';
		if(v[ch[q][w].x-1][ch[q][w].y-1] == '\\'){
			int cn1 = 1,cn2 = 1;
			while(v[ch[q][w].x-cn1][ch[q][w].y-cn2] != 'o') v[ch[q][w].x-cn1][ch[q][w].y-cn2] = 'a',++cn1,++cn2;
		}else{
			int cn1 = 1,cn2 = 1;
			while(v[ch[q][w].x-cn1][ch[q][w].y+cn2] != 'o') v[ch[q][w].x-cn1][ch[q][w].y+cn2] = 'a',++cn1,++cn2;
		}
		
	}
	
	for(int i = 1;i <= a[n-1]+n;++i){
		for(int j = 1;j <= 2*(a[n-1]+n)-1;++j){
			if(i != 1 && (v[i][j] == 'a' || v[i-1][j-1] == 'a' || v[i-1][j+1] == 'a')){
				if(v[i][j] != ' ') v[i][j] = 'a';
				cout << ' ';
				continue;
			}
			cout<<v[i][j];
		}
		cout << endl;
	}
}
2024/10/7 16:05
加载中...