玄3关?
代码带调试信息的
#include <bits/stdc++.h>
using namespace std;
int m,n,x,y,c=-1,d,mij[60];
int a[100][100];
char ans[2000][2000];
char block[6][7]={{'M','M','+','-','-','-','+'},
{'M','/',' ',' ',' ','/','|'},
{'+','-','-','-','+',' ','|'},
{'|',' ',' ',' ','|',' ','+'},
{'|',' ',' ',' ','|','/','M'},
{'+','-','-','-','+','M','M'}};
void place(int aa,int b){
for(int i=0;i<=5;i++){
for(int j=0;j<=6;j++){
if(block[i][j]=='M'){
if(i<2 && j<2){
if(a[i][j-1]>=a[i][j]){
}else{
ans[aa+i][b+j]=block[i][j];
}
}else{
if(a[i][j+1]>=a[i][j]){
}else{
ans[aa+i][b+j]=block[i][j];
}
}
}else{
ans[aa+i][b+j]=block[i][j];
}
}
}
return;
}
int main(){
//n,m是反的!!!
//代码里是n,m
cin>>n>>m;
for(int i=1;i<=1900;i++){
for(int j=1;j<=1900;j++){
ans[i][j]='.';
}
}
d=m*4+1+n*2;
for(int i=1;i<=n;i++){
mij[i]=-1;
for(int j=1;j<=m;j++){
cin>>a[i][j];
c=max(c,a[i][j]*3+1+(n-i+1)*2);
mij[i]=max(mij[i],a[i][j]);
}
}
//cout<<"c="<<c<<" d="<<d<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int stdx=c-(n-i)*2;
int stdy=(n-i)*2;
for(int k=1;k<=a[i][j];k++){
x=stdx-3*k;
y=stdy+(j-1)*4+1;
place(x,y);
/*
for(int ii=3;ii<=c+2;ii++){
for(int jj=1;jj<=d;jj++){
cout<<ans[ii][jj];
}
cout<<endl;
}
*/
}
//cout<<"i="<<i<<" j="<<j<<" a[i][j]="<<a[i][j]<<" x="<<x<<" y="<<y<<endl<<endl;
}
}
for(int i=3;i<=c+2;i++){
for(int j=1;j<=d;j++){
if(ans[i][j]=='M') ans[i][j]='.';
cout<<ans[i][j];
}
cout<<endl;
}
return 0;
/*
2 2
1 1
2 1
..+---+......
./ /|-+---+
+---+ |/ /|
| | +---+ |
| |/| | +
+---+ | |/.
| | +---+..
| |/.......
+---+........
*/
}