Codeforces Round #551 (Div. 2)
B. Serval and Toy Bricks
题意:
有一些规格相同的方块摆放在 n×m 的矩阵 h 中,h[i][j]代表第 (i,j) 个矩阵摆放的方块的高度;
现给你三个视图:
正视图:给出 m 个数据,第 i 个数据 f[ i ] 代表第 i 列方块的最大高度;
左视图:给出 n 个数据,第 i 个数据 l[ i ] 代表第 i 行方块的最大高度;
俯视图:给出 n×m 个数据,只有两个取值,第(i,j)个数据 top[ i ][ j ] 为0代表第(i,j)处无方块,为1代表有方块;
我的思路:
定义变量 a[ i ][ j ] 表示第 (i,j) 处摆放的方块的高度;
初始,根据正视图将 a[ i ][ j ] 填充满,就是假设每一列的高度全为f[ j ];
再根据左视图的值 l[ i ],将 a[][] 中第 i 行值 > l[i] 的赋为 l[ i ];
最后,根据 top[ i ][ j ]输出;
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define INF 0x3f3f3f3f 4 #define ll long long 5 const int maxn=200; 6 7 int n,m,h; 8 int a[maxn][maxn]; 9 10 int main() 11 { 12 // freopen("C:\\Users\\hyacinthLJP\\Desktop\\in&&out\\contest","r",stdin); 13 scanf("%d%d%d",&n,&m,&h); 14 for(int i=1;i <= m;++i) 15 { 16 int f; 17 scanf("%d",&f); 18 for(int j=1;j <= n;++j) 19 a[j][i]=f;//将f填充进a[j][i]中 20 } 21 for(int i=1;i <= n;++i) 22 { 23 int l; 24 scanf("%d",&l); 25 for(int j=1;j <= m;++j) 26 a[i][j]=min(a[i][j],l);//修改a[i][j] > l的区域 27 } 28 for(int i=1;i <= n;++i) 29 for(int j=1;j <= m;++j) 30 { 31 int top; 32 scanf("%d",&top); 33 printf("%d%c",top ? a[i][j]:0,j == m ? '\n':' ');//输出 34 } 35 36 return 0; 37 }