WA #4 #5 #9 求条
查看原帖
WA #4 #5 #9 求条
977904
Zhong_Yixuan楼主2024/12/26 16:34

普通模拟

put 表示将要输出的一行的内容

fl 表示某一行某一列(节点)是否被删除

a 表示高度为 i 的节点要分出多大的叉

pre 单纯为求 a 服务

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int put[1<<15][2];
bool fl[15][1<<15];
inline ll read(){
	ll ref=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
	while(isdigit(ch)) ref=(ref<<1)+(ref<<3)+ch-48,ch=getchar();
	return ref*f;
}
int main(){
//	freopen("aaa.txt","w",stdout);
	int n=read(),m=read();
	int a[20]={1},pre[20]={1};
	for(int i=1;i<20;i++){
		a[i]=pre[i-1]+i;
		pre[i]=pre[i-1]+a[i];
	}
	
	for(int i=0;i<m;i++){
		int ik=read(),un=read();
		fl[ik][un]=1;
	}
	
	if(!fl[1][1]) put[a[n-1]][0]=5;
	for(int i=n-1;i>0;i--){
		int cnt=0;
		for(int j=0;j<a[n];j++){
			if(put[j][0]){
				printf("o");cnt++;
				put[j-1][1]=1,put[j+1][1]=2;
				if(fl[n-i+1][(cnt<<1)-1]) put[j-1][1]=0;
				if(fl[n-i+1][cnt<<1]) put[j+1][1]=0;
			}else printf(" ");
		}puts("");
		for(int j=0;j<a[n];j++) put[j][0]=put[j][1],put[j][1]=0;
		for(int j=0;j<a[i-1];j++){
			for(int k=0;k<a[n];k++){
				if(put[k][0]==1){
					printf("/");
					put[k-1][1]=1;
				}else if(put[k][0]==2){
					printf("\\");
					put[k+1][1]=2;
				}else printf(" ");
			}
			puts("");
			for(int k=0;k<a[n];k++) put[k][0]=put[k][1],put[k][1]=0;
		}
	}
	for(int j=0;j<a[n];j++){
		if(put[j][0]) printf("o");
		else printf(" ");
	}

	return 0;
}
2024/12/26 16:34
加载中...