PKU 2330 Advanced ASCII Cubes

http://poj.org/problem?id=2330
直方体を積まれた状態を文字列で描画しろというような問題。

奥の右の下から順番に置いていけばよい。
やってみるとそんなに面倒でないっぽい。

int in[50][50];

char out[1000][1000];

void bury(int x,int y){
  out[x][y]='+';
  out[x+3][y]='+';
  out[x][y+4]='+';
  out[x+3][y+4]='+';
  out[x+5][y+2]='+';
  out[x+5][y+6]='+';
  out[x+2][y+6]='+';
  rep(i,3){
    out[x][y+i+1]='-';
    out[x+3][y+i+1]='-';
    out[x+5][y+i+3]='-';
    
    out[x+1][y+1+i]=' ';
    out[x+2][y+1+i]=' ';
    out[x+4][y+2+i]=' ';
  }
  out[x+4][y+1]='/';
  out[x+4][y+5]='/';
  out[x+1][y+5]='/';

  rep(i,2){
    out[x+1+i][y]='|';
    out[x+1+i][y+4]='|';
    out[x+3+i][y+6]='|';
    
    out[x+2+i][y+5]=' ';
  }
  
}

main(){
  int n,m;
  cin>>n>>m;
  rep(i,n)rep(j,m)cin>>in[i][j];


  for(int i=n-1;i>=0;--i)for(int j=0;j<m;++j){
      int x=2*i;
      int y=2*i+j*4;
      for(int k=0;k<in[n-1-i][j];++k)
        bury(x+k*3,y);
    }
  int mx=0,my=0;
  rep(i,1000)rep(j,1000)
    if(out[i][j])mx=max(mx,i),my=max(my,j);

  //bury(0,0);
  for(int i=mx;i>=0;--i){
    rep(j,my+1){
      if(out[i][j])cout<<out[i][j];
      else cout<<'.';
    }
    cout<<endl;
  }
}