N*M bulbs(想法 01取反路径)

原题: http://acm.hdu.edu.cn/showproblem.php?pid=5601

题意:

起点为(1,1),终点为(n,m),每个格子非黑即白,1表示黑。现在有一条路径,走过的格子会反转,每个格子可以走多次,问是否存在一种走法走到终点后全白。

解析:

分析格子

1 2 3
4 5 6
7 8 9

1-2-1-2,3-6-3-6,9-8-9-8,即我可以不改变状态的情况下两个两个的移动,比方说我需要改变3这个位置,那么1-2-1-2,3,6-9-6-9,即中间插一步即可。设需要转换的1的个数为x,那么满足要求的步数应该为 2 n + x 2n+x 。从(1,1)到(n,m)需要的步数为(n+m-1),所以当x与(n+m-1)同奇偶就可以,否则不可以。

#include<bits/stdc++.h>
using namespace std;


int main(){
    int t;scanf("%d",&t);
    while(t--){
        int n,m;scanf("%d%d",&n,&m);
        int ct=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                int tmp;scanf("%d",&tmp);
                if(tmp)ct++;
            }
        }
        if((n+m-1)%2==ct%2)printf("YES\n");
        else printf("NO\n");
    }
}

猜你喜欢

转载自blog.csdn.net/jk_chen_acmer/article/details/88584588
nm