记录编号 270447 评测结果 AAAAA
题目名称 1193.魔板游戏 最终得分 100
用户昵称 Riolu 是否通过 通过
代码语言 C++ 运行时间 0.018 s
提交时间 2016-06-14 20:38:25 内存使用 1.70 MiB
显示代码纯文本
/*=========================================*
  * Auther: Riolu
  * PID:
  * Time: 2016.
  * ©Copyright 2016 Riolu. All Rights Reserved.
  *=========================================*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<ctime>
#define N 101
using namespace std;
/*=========DEFINE============================*/
int n,m,ans;
bool e[N][N],s[N][N];
int h[2][N];
int bo[N][N][N];
/*=========JUDGE==============================*/
int ju2(){
    int i,j,x,k;
    k=1;
    for(i=1;i<=m;i++){
        if(k==0)break;k=0;
        for(j=1;j<=m;j++)if(!bo[n][j][i]){k=1;break;}
        }
    return k;
}
/*=========DFS==============================*/
void dfs(int x){
    int i,j,k;
    if(ans==1)return;
    if(x==n+1){
    if(ju2()){ans=1;cout<<"YES"<<endl;}return;}
    if(h[0][x]==h[1][x]){
        for(i=1;i<=m;i++)for(j=1;j<=m;j++)bo[x][i][j]=bo[x-1][i][j];
        for(i=1;i<=m;i++){
            if(e[x][i]){for(j=1;j<=m;j++){if(!s[x][j])bo[x][i][j]=1;}}
            if(!e[x][i]){for(j=1;j<=m;j++){if(s[x][j])bo[x][i][j]=1;}}
        }
        k=1;
        for(i=1;i<=m;i++){
            if(k==0)break;k=0;
            for(j=1;j<=m;j++)if(!bo[x][i][j]){k=1;break;}
            }
        if(k==1)dfs(x+1);
    }
    if(h[0][x]+h[1][x]==m){
        for(i=1;i<=m;i++)for(j=1;j<=m;j++)bo[x][i][j]=bo[x-1][i][j];
        for(i=1;i<=m;i++)e[x][i]=!e[x][i];
        for(i=1;i<=m;i++){
            if(e[x][i]){for(j=1;j<=m;j++){if(!s[x][j])bo[x][i][j]=1;}}
            if(!e[x][i]){for(j=1;j<=m;j++){if(s[x][j])bo[x][i][j]=1;}}
        }
        k=1;
        for(i=1;i<=m;i++){
            if(k==0)break;k=0;
            for(j=1;j<=m;j++)if(!bo[x][i][j]){k=1;break;}
            }
        if(k==1)dfs(x+1);
        }
}
/*=========READ==============================*/
void read(){
	freopen("panel.in","r",stdin);
	freopen("panel.out","w",stdout);
	int i,j,x,y,k,nn;
	ios::sync_with_stdio(false);
    cin>>nn;
    for(i=1;i<=nn;i++){
        memset(bo,0,sizeof(bo));
        memset(h,0,sizeof(h));
        cin>>n>>m;
        for(k=1;k<=n;k++)for(j=1;j<=m;j++){cin>>e[k][j];if(e[k][j])h[0][k]++;}
        for(k=1;k<=n;k++)for(j=1;j<=m;j++){cin>>s[k][j];if(s[k][j])h[1][k]++;}
        ans=0;dfs(1);
        if(ans==0)cout<<"NO"<<endl;
        }
	}
/*=========MAIN==============================*/
int work()
{
	read();
	return 0;
}
int Riolu=work();
int main(){;}