2013-BIT程式設計 2.修剪草坪 -- 暴力
阿新 • • 發佈:2019-01-29
2.修剪草坪
有一個n*m的草坪(1<=n,m<=100),草坪中的草原來的高度都是100。現在使用割草機修剪草坪,來得到各種各樣的圖案。割草機只能橫著或者豎著割草。每次割草都會先設定一個高度,割完之後會把比設定高度高的草都割成設定的高度。比如草原來是5 2 8,設定高度為4,那麼割完之後就變成了4 2 4。
現在給出一個圖案,問是否可以把草坪割成圖案的樣子。
輸入第一行包含兩個整數n和m。
接下來為n行輸入,每行包含m個不大於100的正整數。
如果可以修剪成輸入的圖案,則輸出“YES”,否則輸出“NO”。
測試用例 1 |
|
1秒 |
64M |
0 |
分析:得到規律:草坪上的每一個高度要是其所在行或者所在列的最大值,才能是YES,否則是NO。
#include<stdio.h> int max(int a,int b) { return a>b?a:b; } int main() { int n,m,flag; int map[105][105]; int m1[105][105],m2[105][105]; int _min[105]; while(scanf("%d%d",&n,&m)!=EOF){ flag = 1; for (int i = 0; i < 105; i++) _min[i] = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) { scanf("%d",&map[i][j]); _min[i] = max(_min[i],map[i][j]); m1[i][j] = m2[i][j] = 0; } for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) { if(map[i][j] == _min[i]) m1[i][j] = 1; } for (int i = 0; i < 105; i++) _min[i] = 0; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { _min[i] = max(_min[i],map[j][i]); } for (int i = 0; i < m && flag; i++) for (int j = 0; j < n && flag; j++) { if(map[j][i] == _min[i]) m2[j][i] = 1; if(m2[j][i]==0 && m1[j][i]==0) flag = 0; } if(flag)printf("YES\n"); else printf("NO\n"); } return 0; }