第10个测试点RE了,为什么,跪求大佬!
#include <iostream>
#include <cstring>
using namespace std;
int m, n, x, y, maxdeep, wide, len[5010], deep[5010], t[5010][5010];
char tree[5010][5010];
void pre()
{
int sum=0, k=1;
for(int i=1; i<=15; i++)
{
deep[i]=i+len[i-1];
if(i>1) k=sum+i-1;
len[i]=k;
sum+=k;
}
return ;
}
void pre_deep(int k)
{
int sum=0;
for(int i=1, j=k; i<=k; i++, j--)
{
if(i>1) deep[i]=i+len[j]+sum;
else deep[i]=1;
if(i>1) sum+=len[j];
// cout<<deep[i]<<" ";
}
return ;
}
void beginn(int now, int h, int l)
{
maxdeep=max(maxdeep, h);
if(now==0) return ;
int h1=h+1, h2=h+1, l1=l-1, l2=l+1;
for(; h1<=h+len[now]; h1++, l1--)
{
tree[h1][l1]='/';
}
tree[h1][l1]='o';
beginn(now-1, h1, l1);
for(; h2<=h+len[now]; h2++, l2++)
{
tree[h2][l2]='\\';
}
tree[h2][l2]='o';
beginn(now-1, h2, l2);
return ;
}
void up(int x, int y)
{
tree[x][y]=' ';
if(x-1>=1&&y>=1&&(tree[x-1][y-1]=='/'||tree[x-1][y-1]=='\\'))
{
up(x-1, y-1);
}
if(x-1>=1&&(tree[x-1][y+1]=='/'||tree[x-1][y+1]=='\\'))
{
up(x-1, y+1);
}
return ;
}
void down(int x, int y)
{
tree[x][y]=' ';
if(x+1<=maxdeep&&y-1>=1&&tree[x+1][y-1]!=' ')
{
down(x+1, y-1);
}
if(x+1<=maxdeep&&tree[x+1][y+1]!=' ')
{
down(x+1, y+1);
}
return ;
}
void erase(int x, int y)
{//向上的, 向下的
tree[x][y]=' ';
up(x, y);
down(x, y);
return ;
}
int main()
{
cin>>m>>n;
memset(tree, ' ', sizeof(tree));
pre();
pre_deep(m);
wide=((1<<(m-1))+(1<<(m-1))/2*3+((1<<(m-1))/2-1));
tree[1][((wide)/2+1)]='o';
beginn(m-1, 1, (wide)/2+1);
if(n>0)
for(int ii=1; ii<=n; ii++)
{
cin>>x>>y;
int cnt=0;
for(int i=1; ; i++)
{
if(tree[deep[x]][i]=='o')
{
cnt++;
if(cnt==y)
{
y=i;
break;
}
}
}
x=deep[x];
t[ii][1]=x, t[ii][2]=y;
}
if(n>0)
for(int i=1; i<=n; i++)
{
erase(t[i][1], t[i][2]);
}
for(int i=1; i<=maxdeep; i++)
{
for(int j=1; j<=wide; j++)
{
cout<<tree[i][j];
}
cout<<endl;
}
return 0;
}