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 }
View Code

 


 

posted @ 2019-04-26 08:16  HHHyacinth  阅读(241)  评论(0编辑  收藏  举报