测试点#3、#5RE,提示信息:Runtime Error. Received signal 6: Aborted / IOT trap.。 我不清楚是哪里越界了,有大佬有空帮忙看看吗?谢谢。
#include <cstdio>
class binTree{
private:
int depth,width,height;
char **pic;
public:
binTree(int d){
depth=d;
if(d>1)
height=(1<<(d-1))+(1<<(d-2));
else
height=1;
width=(1<<d)+(1<<(d-1))-2;
//printf("d=%d h=%d w=%d\n",depth,height,width);
pic=new char*[height+1];
for(int i=1;i<=height;i++){
pic[i]=new char[width+2];
for(int j=0;j<=width;j++)
pic[i][j]=' ';
pic[i][width]='\0';
}
pic[1][width+1]='\0';
set(height,width/2,depth);
}
~binTree(){
for(int i=1;i<=height;i++){
delete[] pic[i];
}
delete[] pic;
}
void set(int r,int c,int d){
if(d==1){
pic[r][c]='o';
}
else{
pic[r][c]='o';
int len=((1<<(d-1))+(1<<(d-2))-1)/2;
for(int i=1;i<=len;i++){
pic[r-i][c+i]='\\';
pic[r-i][c-i]='/';
}
set(r-len-1,c+len+1,d-1);
set(r-len-1,c-len-1,d-1);
}
}
void remove(int r,int c,int d){
int len=((1<<(d-1))+(1<<(d-2))-1)/2;
int uplen=((1<<d)+(1<<(d-1))-1)/2;;
//printf("%d\n",uplen);
if(uplen<=0)
uplen=1;
if(r<height&&pic[r+1][c-1]!=' ')
for(int i=1;i<=uplen;i++)
pic[r+i][c-i]=' ';
if(r<height&&pic[r+1][c+1]!=' ')
for(int i=1;i<=uplen;i++)
pic[r+i][c+i]=' ';
if(d==1){
pic[r][c]=' ';
}
else{
pic[r][c]=' ';
for(int i=1;i<=len;i++){
pic[r-i][c+i]=' ';
pic[r-i][c-i]=' ';
}
remove(r-len-1,c+len+1,d-1);
remove(r-len-1,c-len-1,d-1);
}
}
void removeout(int fl,int num){
int subd=depth+1-fl;
int subh;
if(subd>1)
subh=(1<<(subd-1))+(1<<(subd-2));
else
subh=1;
int subw=(1<<subd)+(1<<(subd-1))-1;
int r=subh;
int c=subw*(num-1)+num-1+(subw-1)/2;
if(subd==1&&num%2==0)
c++;
//printf("%d %d %d\n",r,c,subd);
remove(r,c,subd);
}
void show(){
for(int i=height;i>0;i--)
printf("%s\n",pic[i]);
}
};
int main(){
int m,n;scanf("%d %d",&m,&n);
binTree bT(m);
for(int i=1;i<=n;i++){
int fl,num;scanf("%d %d",&fl,&num);
bT.removeout(fl,num);
}
bT.show();
return 0;
}