| 记录编号 |
270434 |
评测结果 |
AAAAA |
| 题目名称 |
1193.魔板游戏 |
最终得分 |
100 |
| 用户昵称 |
Riolu |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
0.053 s |
| 提交时间 |
2016-06-14 20:30:33 |
内存使用 |
4.26 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;
// cout<<endl;
// for(k=1;k<=n;k++){for(j=1;j<=m;j++)cout<<e[k][j]<<' ';cout<<endl;}
// cout<<'a'<<endl;
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){//cout<<"OK"<<endl;
//for(k=1;k<=n;k++){for(j=1;j<=m;j++)cout<<e[k][j]<<' ';cout<<endl;}
//cout<<endl;
//for(k=1;k<=m;k++){for(j=1;j<=m;j++)cout<<bo[n][k][j]<<' ';cout<<endl;}
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]++;}//cout<<h[0][k]<<endl;}
//cout<<endl;
for(k=1;k<=n;k++)for(j=1;j<=m;j++){cin>>s[k][j];if(s[k][j])h[1][k]++;}//cout<<h[1][k]<<endl;}
ans=0;dfs(1);
if(ans==0)cout<<"NO"<<endl;
}
}
/*=========MAIN==============================*/
int main()
{
read();
return 0;
}