BITCS2016程序设计 | 2. 修剪草坪

来源:互联网 发布:使用python运维 编辑:程序博客网 时间:2024/04/28 19:50

2. 修剪草坪

成绩10开启时间2016年08月30日 星期二 09:00折扣0.8折扣时间2016年09月2日 星期五 23:00允许迟交否关闭时间2016年10月10日 星期一 23:55

有一个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秒64M0解题思路:
乍一看题意很像动归(我经验少T T)然而其实也是一个寻找规律就可以轻松求解的问题。如果一时找不到做题思路大家可以先在纸上做一个简单的实例推导,多推几个简单的情况,和同学们交换几种自己想出的样例,最终就可以找到答案。
题目中要求我们检查草坪能否被修剪为输入的矩阵的形式,其一要锻炼大家对输入处理的能力,第二则是需要抓住,修剪都是整行整列地统一修剪的:所以每个在矩阵中的值都不能同时,既是所在行中最小值,又是所在列中的最小值。如果矩阵中的每个值都符合这个条件,则输出“YES\n”;反之,“NO\n”。


程序:
#include "stdio.h"int main(){int n, m, flag = 0, grass[100][100] = {0};scanf( "%d%d", &n, &m );// Input the goal grass heightfor( int i = 0; i < n; i ++ )for( int j = 0; j < m; j ++ )scanf( "%d", &grass[ i ][ j ] );// Check whether the goal can be achievedfor( int i = 0; i < n && flag != 2; i ++ )for( int j = 0; j < m; j ++ ){flag = 0;int curHeight = grass[ i ][ j ];// Check whether there is a higher height in the same rowfor( int l = 0; l < m ; l ++ )if( curHeight < grass[ i ][ l ] ){flag ++;break;}// Check whether there is a higher height in the same columnfor( int l = 0; l < n; l ++ )if( curHeight < grass[ l ][ j ] ){flag ++;break;}if( flag == 2 ){//printf( "NO\n" );break;}}if( flag < 2 )printf( "YES\n" );return 0;}


结果:



最爱绿色有没有!我爱思考,我爱绿色~




0 0
原创粉丝点击