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; } }