bzoj4171 or 省队集训day3 chess: Rhl的游戏
2015-07-29 22:16
197 查看
【题目描述】
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:
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>>5],a[maxn<<1][maxn>>5]; bool col[maxn][maxn],ok,d[maxn][maxn],b[maxn<<1]; inline void read(int &x){ for (ok=0,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=1; for (x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar()); if (ok) x=-x; } bool gauss(){ int i,j,k,p,q; for (i=0,k=1;i<N;i++){ for (p=(1<<(i&31)),j=k;j<=M&&!(a[j][i>>5]&p);j++); if (j<=M){ for (q=(i>>5);q<=((N-1)>>5);q++) swap(a[k][q],a[j][q]); swap(b[k],b[j]); for (j=j+1;j<=M;j++) if (a[j][i>>5]&p){ for (q=(i>>5);q<=((N-1)>>5);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=1;t<=T;t++){ read(m),read(n),read(k),N=n,M=n; for (int i=1;i<=m;i++){ scanf("%s",s+1); for (int j=1;j<=n;j++) col[i][j]=(s[j]=='B'); } for (int i=1;i<=n;i++) c[1][i][(i-1)>>5]=(1<<((i-1)&31)); for (int i=2;i<=m;i++) for (int j=1;j<=n;j++){ for (int k=0;k<=((n-1)>>5);k++) c[i][j][k]=c[i-1][j-1][k]^c[i-1][j][k]^c[i-1][j+1][k]^c[i-2][j][k]; d[i][j]=d[i-1][j-1]^d[i-1][j]^d[i-1][j+1]^d[i-2][j]^col[i-1][j]; } for (int i=1;i<=n;i++){ for (int j=0;j<=((n-1)>>5);j++) a[i][j]=c[m][i][j]^c[m][i-1][j]^c[m][i+1][j]^c[m-1][i][j]; b[i]=col[m][i]^d[m][i-1]^d[m][i]^d[m][i+1]^d[m-1][i]; } while (k--){ read(x),read(y),++M; for (int i=0;i<=((n-1)>>5);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 0; }
相关文章推荐
- android使用代码编写布局
- 405 Not Allowed问题
- NoSQL架构实践(一)——以NoSQL为辅
- 程序日志--ios“考反应扑克游戏”程序
- Space Ant - POJ 1696 叉积
- MRC模式下property 的retain带来的内存泄露
- leetcode刷题目 总结 记录 备忘11
- 静态代理与动态代理
- java要看的书
- 关系数据库还是NoSQL数据库
- 亚马逊的S3服务水平协议(Service Level Agreement,SLA)
- 公有,保护,私有继承基类
- [转载] C-MEX程序编写
- *Delphi容器类之---TOrderedList、TStack、TQueue、TObjectStack、TObjectQueue
- 黑马程序员----java循环结构总结
- 连载二———C语言篇
- NSMutableAttributedString 属性字符串的使用
- 7.5.2 Point-in-Time Recovery Using Event Positions
- C++内存管理
- 解决执行python 脚本一闪而过问题