hdu5601 BestCoder Round #67 (div.2)
2015-12-27 01:02
381 查看
N*M bulbs
Accepts: 94Submissions: 717
Time Limit: 10000/5000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
N*M个灯泡排成一片,也就是排成一个N*M的矩形,有些开着,有些关着,为了节约用电,你要关上所有灯,但是你又很懒。 刚好有个熊孩纸路过,他刚好要从左上角的灯泡走去右下角的灯泡,然后离开。 但是毕竟熊孩纸,熊孩纸在离开一个灯泡之前,一定会动一下当前开关,也就是开的变关,关的变开。 想问你可不可能关完所有的灯,同时熊孩纸也可以到达右下角的灯泡,然后离开。
输入描述
第一行T,表示T组数据。 接下来T组数据: 每组数据,第一行N,M,后面一个N*M的01矩阵,表示灯泡的初始开关状态,0表示关,1表示开。 1 \leq T \leq 101≤T≤10 1 \leq N, M \leq 10001≤N,M≤1000
输出描述
每组数据,如果可以输出"YES",否则输出"NO"。
输入样例
1 1 5 1 0 0 0 0
输出样例
YES
Hint
孩子的路径是:123234545 刚好除了第一盏灯,其他灯都只经过偶数次。
思路:
看见题大致乱想了一下,感觉001 和 0001这种最后都能变成100和1000这种,而且人在1这个点,于是看成无论是相隔奇数个还是偶数个0都能转移到起点。最后就成了判断起点0,1,然后判断能否到达终点。
#include <iostream> #include <cstdio> #include <cstdlib> #include <functional> #include <cmath> #include <cstring> #include <algorithm> using namespace std; const int maxn = 10000; int a[maxn][maxn]; int main() { int T; int n,m; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); int num = 0; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) { scanf("%d",&a[i][j]); if(a[i][j] == 1) num++; } if(num % 2) { if((n + m) % 2) printf("NO\n"); else printf("YES\n"); } else { if((n + m) % 2 == 0) printf("NO\n"); else printf("YES\n"); } } return 0; }
相关文章推荐
- hdu5601 BestCoder Round #67 (div.2)
- 算法设计题2.32-线性表-第2章-《数据结构习题集》-严蔚敏吴伟民版
- Ubuntu安装php--mongo扩展
- struct和typedef struct(转)
- NSAttributedString
- suse防火墙 iptables不存在
- 使用node.js的第三方模块Mongoose访问mongodb(六)
- android 之开源控件roundedimageview
- 创建数据库和表
- 使用pg_basebackup搭建PostgreSQL流复制环境
- UIMenuController
- java(一)编程工具的下载与环境变量的配置
- Ubuntu 安装Flask
- Linux ->> UBuntu 14.04 LTE下设置静态IP地址
- 写些最近两个学安卓的笔记-关于Toast
- 1067. Sort with Swap(0,*) (25)【贪心】——PAT (Advanced Level) Practise
- Jsp+MySQL+Tomcat做的小服务器测试
- C#委托&Lambda
- 返回值(null)和<null>处理【空指针和野指针】
- 手淘双十一系列(一) | 521 性能优化项目揭秘