求助,玄学RE
查看原帖
求助,玄学RE
238203
跟你沟通楼主2020/11/2 23:04
#include<bits/stdc++.h>
using namespace std;
long long n,k,num,x,y,line=2000;
long long l,r,f[20]={0,1,2,5,11,23,47,95,191,383,767};
long long s[20]={0,2,6,12,24,48,96,192,384,768,1536};
char paint[2001][5000];
struct TREE
{
	long long x,y;
}tree[3100];
void draw(long long i)
{
	x=line,y=l;
	l=y+f[i]+1;
	for(long long j=1;j<=num/2;++j)
	{
		for(long long k=1;k<=f[i];++k)
			paint[--x][++y]='/';
		paint[--x][++y]='o';

		for(long long k=1;k<=f[i];++k)
			paint[++x][++y]='\\';
		++x;
		y++;
		y+=s[i];
	}
	y-=s[i];
	r=y-f[i]-1;
	//cout<<y<<endl;
	line=x-f[i]-1;
	num/=2;
}
void remove_down_all(long long up,long long r_l,long long r_r)
{
	for(long long i=up;i<=2000;++i)
		for(long long j=r_l;j<=r_r;++j)
			paint[i][j]=' ';
}
void remove_up_edge(long long x,long long y)
{
	long long ex=x-1,ey=y-1;
	if(paint[ex][ey]!=' ')
		while(paint[ex][ey]!='o')
			paint[ex--][ey--]=' ';
	ex=x-1,ey=y+1;
	if(paint[ex][ey]!=' ')
		while(paint[ex][ey]!='o')
			paint[ex--][ey++]=' ';
}
int main()
{
	cin>>n>>k;
	memset(paint,' ',sizeof(paint));
	num=1<<(n-1);
	long long num2=num;
	l=1;r=(num/2)*6-1;//初始化左右边界
	for(long long i=1,j=1;i<=num/2;++i,j+=6)
	{
		paint[2000][j]='o';
		paint[2000][j+4]='o';
	}
	for(long long i=1;i<n;++i)
		draw(i);

	long long len=0;
	long long to=(num2/2)*6-1;
	for(long long i=line;i<=2000;++i)
		for(long long j=1;j<=to;++j)
		{
			if(paint[i][j]=='o')
			{
				tree[++len].x=i;
				tree[len].y=j;
			}
		}
	long long t,y1,y2;
	for(long long i=1;i<=k;++i)
	{
		scanf("%d%d",&x,&y);
		t=1<<(x-1);
		t=t+y-1;
		x=tree[t].x;
		y=tree[t].y;
		y1=y-(2000-x);
		y2=y+(2000-x);
		remove_down_all(x,y1,y2);
		remove_up_edge(x,y);
	}

	for(long long i=line;i<=2000;++i)
	{	
		for(long long j=1;j<=to;++j)
			cout<<paint[i][j];
		cout<<endl;
	}
}
2020/11/2 23:04
加载中...