记录编号 |
331791 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2008]立体图 |
最终得分 |
100 |
用户昵称 |
Rapiz |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.019 s |
提交时间 |
2016-10-28 00:46:28 |
内存使用 |
1.25 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#define file(x) "drawingu."#x
int n,m,k,l;
char buf[1000][1000];
inline void hline(int x,int y,int l){
for(int i=y;i<=y+l;i++) buf[x][i]=(buf[x][i]=='.'||buf[x][i]==' ')?'-':'+';
}
inline void vline(int x,int y,int l){
for(int i=x;i<=x+l;i++) buf[i][y]=(buf[i][y]=='.'||buf[i][y]==' ')?'|':'+';
}
inline void cvline(int x,int y,int l){
for(int i=x;i<=x+l;i++) buf[i][y]=' ';
}
inline void sline(int x,int y,int l){
for(int i=x,j=y;i<=x+l;i++,j++) buf[i][j]=(buf[i][j]=='.'||buf[i][j]==' ')?'/':'+';
}
void tshow(){
for(int i=k;i;i--,printf("\n")) for(int j=1;j<=l;j++) printf("%c",buf[i][j]);
printf("\n");
}
void draw(int x,int y,int h){
x=1+(x-1<<1),y=x+(y-1<<2);
for(int i=x;i<=x+3*h;i++) for(int j=y;j<=y+4;j++) buf[i][j]=' ';//front
for(int i=x+3*h;i<=x+3*h+2;i++) {
int s=y+i-(x+3*h);
for(int j=s;j<=s+4;j++) buf[i][j]=' ';
}//top
for(int i=y+4;i<=y+4+2;i++){
cvline(x+(i-(y+4)),i,3*h);
}
for(int i=0;i<=h;i++) hline(x+i*3,y,4),sline(x+i*3,y+4,2);
hline(x+h*3+2,y+2,4),sline(x+3*h,y,2);
vline(x,y,h*3),vline(x,y+4,h*3),vline(x+2,y+4+2,h*3);
}
int main(){
freopen(file(in),"r",stdin);
freopen(file(out),"w",stdout);
scanf("%d%d",&n,&m);
memset(buf,'.',sizeof(buf));
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) {
int h;scanf("%d",&h);
draw(n-i+1,j,h);
}
bool f;
do{
f=0;
for(int i=1;i<1000;i++) if(buf[k+1][i]!='.') {
f=1;
++k;
break;
}
}while(f);
do{
f=0;
for(int i=1;i<=k;i++) if(buf[i][l+1]!='.') {
f=1;
++l;
break;
}
}while(f);
tshow();
}