1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; const int N=400; char mp[N][N]; //这个题的核心就是坐标转换 //我们选择左下角作为基准点 //int x=399-2*(n-i)-3*(k-1); // 行的贡献 高度贡献 //int y=2*(n-i)+4*(j-1); // 行的贡献 列的贡献 char box[10][10]={ //一个立体箱子 "..+---+", "./ /|", "+---+ |", "| | +", "| |/.", "+---+..", }; int h[N][N]; int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) //获取高度 { for(int j=1;j<=m;j++) { cin>>h[i][j]; } } for(int i=0;i<N;i++) //初始化为空 { for(int j=0;j<N;j++) { mp[i][j]='.'; } } int up=N-1,right=0; //最上和最右边 for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { for(int k=1;k<=h[i][j];k++) { int x=399-2*(n-i)-3*(k-1); //计算当前这个箱子在的行 int y=2*(n-i)+4*(j-1); //计算当前箱子在的列 up=min(up,x-5); // right=max(right,y+6); for(int a=0;a<6;a++) //将箱子放入当前位置 { for(int b=0;b<7;b++) { if(box[a][b]!='.') { mp[x-5+a][y+b]=box[a][b]; } } } } } } for(int i=up;i<N;i++) //输出 { for(int j=0;j<=right;j++) { cout<<mp[i][j]; } cout<<endl; } return 0; }
- 1
信息
- ID
- 812
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者