BestCoder Round #67 (div.2) N*M bulbs

本文介绍了一个有趣的编程问题:如何通过熊孩子切换灯泡的方式,在他从左上走到右下的过程中关闭所有灯泡。文章提供了判断是否能成功关闭所有灯泡的算法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述
N*M个灯泡排成一片,也就是排成一个N*M的矩形,有些开着,有些关着,为了节约用电,你要关上所有灯,但是你又很懒。
刚好有个熊孩纸路过,他刚好要从左上角的灯泡走去右下角的灯泡,然后离开。
但是毕竟熊孩纸,熊孩纸在离开一个灯泡之前,一定会动一下当前开关,也就是开的变关,关的变开。
想问你可不可能关完所有的灯,同时熊孩纸也可以到达右下角的灯泡,然后离开。
输入描述
第一行T,表示T组数据。
接下来T组数据:
每组数据,第一行N,M,后面一个N*M的01矩阵,表示灯泡的初始开关状态,0表示关,1表示开。

1 \leq T \leq 101T10
1 \leq N, M \leq 10001N,M1000
输出描述
每组数据,如果可以输出"YES",否则输出"NO"。
输入样例
1
1 5
1 0 0 0 0
输出样例
YES
Hint
孩子的路径是:123234545
刚好除了第一盏灯,其他灯都只经过偶数次。

 

 

总的操作次数是跟nn奇偶的。如果1的总数和n的奇偶性不同,就是无解,如果奇偶性相同,有解。

 1 #include <iostream>
 2 #include <cstdio>
 3 int t,n,count,a;
 4 int main(int argc, char** argv)
 5 {
 6     scanf("%d",&t);
 7     while(t--)
 8     {
 9         scanf("%d",&n);
10         count=0;
11         for(int i=0;i<n;i++)
12         {
13             scanf("%d",&a);
14             if(a==1) count++;
15         }
16         if(count%2==0&&n%2==0||count%2!=0&&n%2!=0)
17             printf("Yes\n");
18         else
19             printf("No\n");
20     }
21     return 0;
22 }

 

转载于:https://www.cnblogs.com/millerchan/p/5079089.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值