【题目描述】

RHL最近迷上一个小游戏:Flip it。游戏的规则很简单,在一个N*M的格子上,有一些格子是黑色,有一些是白色。每选择一个格子按一次,格子以及周围边相邻的格子都会翻转颜色(边相邻指至少与该格子有一条公共边的格子),黑变白,白变黑。

RHL希望把所有格子都变成白色的。不幸的是,有一些格子坏掉了,无法被按下。这时,它可以完成游戏吗?

【输入格式】

第一行一个整数T,表示T组数据。

每组数据开始于三个整数n,m,k,分别表示格子的高度和宽度、坏掉格子的个数。接下来的n行,每行一个长度m的字符串,表示格子状态为’B’或‘W’。最后k行,每行两个整数Xi,Yi(1≤Xi≤n,1≤Yi≤m),表示坏掉的格子。

【输出格式】

对于每组数据,先输出一行Case #i: (1≤i≤T)

如果可以成功,输出YES,否则输出NO。

【样例输入】

2

3 3 0

WBW

BBB

WBW

3 3 2

WBW

BBB

WBW

2 2

3 2

【样例输出】

Case #1:

YES

Case #2:

NO

【数据范围】

30%,n,m,k<=10

100%,n,m,k<=256,T<=10

http://www.cnblogs.com/chenyushuo/p/4685182.html

和这个类似的设个xor方程组,对于不能按的方块,直接将它定为0即可

code:

 #include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#define maxn 260
using namespace std;
char ch,s[maxn];
int T,n,m,N,M,k,x,y;
unsigned int c[maxn][maxn][maxn>>],a[maxn<<][maxn>>];
bool col[maxn][maxn],ok,d[maxn][maxn],b[maxn<<];
inline void read(int &x){
for (ok=,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=;
for (x=;isdigit(ch);x=x*+ch-'',ch=getchar());
if (ok) x=-x;
}
bool gauss(){
int i,j,k,p,q;
for (i=,k=;i<N;i++){
for (p=(<<(i&)),j=k;j<=M&&!(a[j][i>>]&p);j++);
if (j<=M){
for (q=(i>>);q<=((N-)>>);q++) swap(a[k][q],a[j][q]);
swap(b[k],b[j]);
for (j=j+;j<=M;j++)
if (a[j][i>>]&p){
for (q=(i>>);q<=((N-)>>);q++) a[j][q]^=a[k][q];
b[j]^=b[k];
}
k++;
}
}
for (;k<=M;k++) if (b[k]) return false;
return true;
}
int main(){
read(T);
for (int t=;t<=T;t++){
read(m),read(n),read(k),N=n,M=n;
for (int i=;i<=m;i++){
scanf("%s",s+);
for (int j=;j<=n;j++) col[i][j]=(s[j]=='B');
}
for (int i=;i<=n;i++) c[][i][(i-)>>]=(<<((i-)&));
for (int i=;i<=m;i++)
for (int j=;j<=n;j++){
for (int k=;k<=((n-)>>);k++)
c[i][j][k]=c[i-][j-][k]^c[i-][j][k]^c[i-][j+][k]^c[i-][j][k];
d[i][j]=d[i-][j-]^d[i-][j]^d[i-][j+]^d[i-][j]^col[i-][j];
}
for (int i=;i<=n;i++){
for (int j=;j<=((n-)>>);j++)
a[i][j]=c[m][i][j]^c[m][i-][j]^c[m][i+][j]^c[m-][i][j];
b[i]=col[m][i]^d[m][i-]^d[m][i]^d[m][i+]^d[m-][i];
}
while (k--){
read(x),read(y),++M;
for (int i=;i<=((n-)>>);i++) a[M][i]=c[x][y][i];
b[M]=d[x][y];
}
printf("Case #%d:\n",t);
if (gauss()) puts("YES");
else puts("NO");
}
return ;
}

bzoj4171 or 省队集训day3 chess: Rhl的游戏的更多相关文章

  1. 省队集训Day3 light

    [问题描述] “若是万一琪露诺(俗称 rhl)进行攻击,什么都好,冷静地回答她的问题来吸引她.对方表现出兴趣的话,那就慢慢地反问.在她考虑答案的时候,趁机逃吧.就算是很简单的问题,她一定也答不上来.” ...

  2. 省队集训Day3 tree

    [题目描述] RHL 有一天看到 lmc 在玩一个游戏. “愚蠢的人类哟,what are you doing”,RHL 说. “我在玩一个游戏.现在这里有一个有 n 个结点的有根树,其中有 m 个叶 ...

  3. FJ省队集训DAY3 T2

    思路:如果一个DAG要的路径上只要一条边去切掉,那么要怎么求?很容易就想到最小割,但是如果直接做最小割会走出重复的部分,那我们就这样:反向边设为inf,这样最小割的时候就不会割到了,判断无解我们直接用 ...

  4. FJ省队集训DAY3 T1

    思路:我们考虑如果取掉一个部分,那么能影响到最优解的只有离它最近的那两个部分. 因此我们考虑堆维护最小的部分,离散化离散掉区间,然后用线段树维护区间有没有雪,最后用平衡树在线段的左右端点上面维护最小的 ...

  5. 省队集训 Day3 吴清华

    [题目大意] 给网格图,共有$n * n$个关键节点,横向.纵向距离均为$d$,那么网格总长度和宽度均为$(n+1) * d + 1$,最外围一圈除了四角是终止节点.要求每个关键节点都要通过线连向终止 ...

  6. 省队集训 Day3 陈姚班

    [题目大意] 给一张网格图,上往下有流量限制,下往上没有,左往右有流量限制. $n * m \leq 2.5 * 10^6$ [题解] 考场直接上最大流,50分.竟然傻逼没看出狼抓兔子. 平面图转对偶 ...

  7. 省队集训 Day3 杨北大

    [题目大意] 给出平面上$n$个点$(x_i, y_i)$,请选择一个不在这$n$个点之内的点$(X, Y)$,定义$(X, Y)$的价值为往上下左右四个方向射出去直线,经过$n$个点中的数量的最小值 ...

  8. JS省队集训记

    不知不觉省队集训已经结束,离noi也越来越近了呢 论考前实战训练的重要性,让我随便总结一下这几天的考试 Day 1 T1 唉,感觉跟xj测试很像啊?meet in middle,不过这种题不多测是什么 ...

  9. HN2018省队集训

    HN2018省队集训 Day1 今天的题目来自于雅礼的高二学长\(dy0607\). 压缩包下载 密码: 27n7 流水账 震惊!穿着该校校服竟然在四大名校畅通无阻?霸主地位已定? \(7:10\)从 ...

随机推荐

  1. [Locked] Largest BST Subtree

    Largest BST Subtree Given a binary tree, find the largest subtree which is a Binary Search Tree (BST ...

  2. angularJS 指令二

    指令详解1.用directive()方法来定义指令.directive('myDirective',function($timeout,userDefinedService){ return {};} ...

  3. mybatis 关联对象mapper.xml的写法

    https://github.com/zfrHJ/mybaties/blob/master/mybaties/src/com/itheima/mybatits/mapper/OrdersMapperC ...

  4. Java里的IO流里的 ObjectInputStream 的读取\写入!

    各位好!!我又来了!!今天遇见了一个小问题!! IO流里的对象读取总是出错!各种报错!!神烦啊!!百思不得其解啊!然后就上网百度!找了好久终于让我找到了!下面就让我来说一说! 当你用IO流里的对象流写 ...

  5. Unity3D 集成 Face++ FacePlusPlus httpClient http协议 byte数组转string

    //開始由于要实现跨平台.考虑过用curl封装c++的dll(android *.so)的方式,在c#Dllimport实现 //后来发现Unity3D本身支持http协议.且face++的api都是 ...

  6. CF 19D Points 【线段树+平衡树】

    在平面上进行三种操作: 1.add x y:在平面上添加一个点(x,y) 2.remove x y:将平面上的点(x,y)删除 3.find x y:在平面上寻找一个点,使这个点的横坐标大于x,纵坐标 ...

  7. configure JAAS for jboss 7.1 and mysql--reference

    Hello all, In this tutorial we are going to configure JAAS for jboss 7.1 and mysql for Form based au ...

  8. android中的数据库操作(转)

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   an ...

  9. 【原创】贴片电容的测量方法。。。这是我从自己QQ空间转过来的,本人实操!

    电容不工作一般分为3种情况,漏电.击穿.无电容.一般检测用万用表检测阻值一般调在10K-20K为测量标准,特别是贴片电容.把万用表的笔尖点在贴片电容的两侧,如下图测量: l1.jpg l2.jpg l ...

  10. mac 卸载java

    由于电脑上的jdk版本和项目组使用的版本不一致,因此需要卸载,但是作为一个新人小白加没有使用mac的过多经验,还是稍微费了一些些功夫的,从网上查的资料,终于解决这个问题,因此记录一下. 参考博客:ht ...