2013-BIT程序设计 2.修剪草坪 -- 暴力

2.修剪草坪

有一个n*m的草坪(1<=n,m<=100),草坪中的草原来的高度都是100。现在使用割草机修剪草坪,来得到各种各样的图案。割草机只能横着或者竖着割草。每次割草都会先设定一个高度,割完之后会把比设定高度高的草都割成设定的高度。比如草原来是5 2 8,设定高度为4,那么割完之后就变成了4 2 4。
现在给出一个图案,问是否可以把草坪割成图案的样子。
输入第一行包含两个整数n和m。
接下来为n行输入,每行包含m个不大于100的正整数。
如果可以修剪成输入的图案,则输出“YES”,否则输出“NO”。

 

测试输入关于“测试输入”的帮助

期待的输出关于“期待的输出”的帮助

时间限制关于“时间限制”的帮助

内存限制关于“内存限制”的帮助

额外进程关于“{$a} 个额外进程”的帮助

测试用例 1

以文本方式显示

  1. 3 3↵
  2. 2 1 2↵
  3. 1 1 1↵
  4. 2 1 2↵

以文本方式显示

  1. YES↵

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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值