Description
有一个n*m的草坪(1<=n,m<=100),草坪中的草原来的高度都是100。现在使用割草机修剪草坪,来得到各种各样的图案。割草机只 能横着或者竖着割草。每次割草都会先设定一个高度,割完之后会把比设定高度高的草都割成设定的高度。比如草原来是5 2 8,设定高度为4,那么割完之后就变成了4 2 4。
现在给出一个图案,问是否可以把草坪割成图案的样子。
Input
输入第一行包含两个整数n和m。
接下来为n行输入,每行包含m个不大于100的正整数。
Output
如果可以修剪成输入的图案,则输出“YES”,否则输出“NO”。
Sample input
3 3
2 1 2
1 1 1
2 1 2
Samput Output
YES
水题,每个数必须是行最小或者列最小。
#include<stdio.h>
#include<string.h>
#define maxn 20
int map[maxn][maxn];
int max[10010];
int main()
{
int n, m, i, j;
while (scanf("%d%d", &n, &m) != EOF)
{
memset(map, 0, sizeof(map));
memset(max, 0, sizeof(max));
for (i = 1;i <= n;i++)
{
for (j = 1;j <= m;j++)
{
scanf("%d", &map[i][j]);
}
}
for (i = 1;i <= n;i++)
{
for (j = 1;j <= m;j++)
{
if (map[i][j] > max[i])
{
max[i] = map[i][j];
}
}
}
for (j = 1;j <= m;j++)
{
for (i = 1;i <= n;i++)
{
if (map[i][j] > max[n + j])
max[n + j] = map[i][j];
}
}
int flag = 0;
for (i = 1;i <= n;i++)
{
for (j = 1;j <= m;j++)
{
if (max[i] != map[i][j] && max[n + j] != map[i][j])
flag = 1;
}
}
if (flag)
printf("NO\n");
else printf("YES\n");
}
}