玩过俄罗斯方块?那你知道俄罗斯方块共有七种吧(其实只有五种)

给一个黑白图,每次能将某些区域的格子黑白反转,至于某些区域的意思嘛,就是俄罗斯方块形状的区域咯(可水平翻转、上下翻转、旋转)
求能否将图变成全白
Input
多组数据,第一行一个正整数 T,表示数据组数
每组数据中第一行两个正整数 n,m,表示图的长和宽
接下来 n 行,每行 m 个数字,表示第 i 行第 j 列的格子的颜色,0为白,1为黑 T<=1000,∑n*m<=10000000
Output
对于每组数据,若能将图变成全白,则输出一行字符串"Yes",否则输出"No"(不包含双引号)
Input示例
1
4 4
0110
0110
1111
1111
Output示例
Yes
————————————————————————————————————————————————————————————————————————————————
这道题呢 我们可以靠一个 2x2 的矩阵将所有的 1 都转换到最后一行 和 最后一列
然后靠 1x4 将所有的一转换到最后一列 和 最下面一列 的三各
最后用 7 形状的 把问题转换成 右下角的三个格
最后发现偶数有解 奇数无解
在这个过程中我们又发现最后的奇偶 和 原来矩阵的 奇偶一样 这个就自己证明把
当然 1x?2x2 需要特判一波
#include<stdio.h>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int ans,T,n,m;
bool s[M];
char c;
bool isdigit(char c) {return c>='' && c<='';}
int main()
{
T=read();
while(T--){
n=read(); m=read();
if(n>m) swap(n,m);
while (!isdigit(c=getchar()));
if (n==){
for (int i=;i<m;i++) {s[i]=(c-''); while(!isdigit(c=getchar()));}
s[m]=(c-'');
for (int i=;i<=m-;i++)
if(s[i]) for(int j=;j<=;j++) s[i+j]^=;
if (s[m-]||s[m-]||s[m]) printf("No\n");
else printf("Yes\n");
}
else if (n==&&m==){
int ans=;
for (int i=;i<;i++){
ans+=(c-'');
while (!isdigit(c=getchar()));
}
ans+=(c-'');
if(ans==||!ans) printf("Yes\n");
else printf("No\n");
}
else{
int ans=;
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
{
if (i==n&&j==m) break;
ans+=(c-'');
while (!isdigit(c=getchar()));
}
ans+=(c-'');
if (ans%) printf("No\n");
else printf("Yes\n");
}
}
return ;
}

51nod 1851 俄罗斯方块的更多相关文章

  1. 51nod 1851俄罗斯方块(trick)

    题目大意:给出一个黑白图,你可以选定一个俄罗斯方块的区域,黑白翻转,问能否变成白图 比较trick的题目, 首先可以想到,奇数个1肯定是无解的,所以考虑偶数个1 可以先讨论n是2的情况 当n为2时,其 ...

  2. 【51nod】1851 俄罗斯方块

    题解 最近一遇到神仙题一卡就好久--做点水题滋养一下自己吧= = 显然我们发现放一个方块的奇偶性不会改变,所以格子如果黑格子是奇数,那么就是No 我们发现每个2 × 3的方格里的2 × 1的黑格子都可 ...

  3. 还是俄罗斯方块之android版

    前面的,口水话 请直接跳过. 虽然现在不比以前了 也没多少人气了,放到首页 都不到几百的点击量.也许博客园整体水平也是在往水的方向发展.不谈那些了,哥也曾经辉煌过 有过一天上千的点击量 ,哥也曾经有过 ...

  4. x01.Tetris: 俄罗斯方块

    最强大脑有个小孩玩俄罗斯方块游戏神乎其技,那么,就写一个吧,玩玩而已. 由于逻辑简单,又作了一些简化,所以代码并不多. using System; using System.Collections.G ...

  5. 【51Nod 1244】莫比乌斯函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...

  6. 51Nod 1268 和为K的组合

    51Nod  1268  和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...

  7. 51Nod 1428 活动安排问题

    51Nod   1428  活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...

  8. 51Nod 1278 相离的圆

    51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...

  9. 俄罗斯方块C#版

    using System; using System.Windows.Forms; using System.Drawing; using System.Media; class me : Form ...

随机推荐

  1. PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现

    PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现 之前记录过一篇文章,不过那只是简单将二维码合成到海报中去,这次还要合成头像,而且是圆形.所需要素材就不一一列举,直接代码吧 1.先获取用 ...

  2. sed命令例子详解

    sed -e '/Patricia/h' -e '/Margot/x' datafile 包含Margot的行将被包含Patricia的行替换: sed -e /WE/{h;d;}' -e '/CT/ ...

  3. 笔记-docker-2安装(centos6.5环境)

    笔记-docker-2安装(centos6.5环境) 1.      centos6.5安装docker 1.1.    升级内核 安装docker,官方文档要求linux kernel至少3.8以上 ...

  4. 清空Fragment回退栈中某个Fragment之上的所有Fragment

    根据debug信息查看Fragment回退栈的情况,具体debug代码如下: int num = getActivity().getSupportFragmentManager().getBackSt ...

  5. 原码、反码、补码、BCD码、格雷码

    二进制的最高位表示这个二进制的正负符号(0为正,1为负),其余各位数表示其数值本身称为原码. 正数的反码等于原码,负数的反码是在原码的基础上,符号位不变,其余各位取反. 正数的补码等于原码,负数的补码 ...

  6. 1- js vue.js

    1 js 2  Vue.js

  7. 《Cracking the Coding Interview》——第18章:难题——题目4

    2014-04-29 01:05 题目:数数从0到n总共有多少个数字‘2’? 解法:数位动态规划,可以O(log10(n))时间内解决. 代码: // 18.4 Count the number of ...

  8. 《Cracking the Coding Interview》——第2章:链表——题目4

    2014-03-18 02:27 题目:将一个单链表按照一个值X分为两部分,小于X的部分放在大于等于X的部分之前. 解法:按照值和X的大小,分链表为两条链表,然后连起来成一条. 代码: // 2.4 ...

  9. Windows下如何解决git bash的默认home目录路径问题

    转自:http://blog.csdn.net/lucien_zhou/article/details/62069246 为了解决这个问题,我在网上找了好久,尝试过按网上其他人所述,修改 git 安装 ...

  10. redhat 安装python3

    一.首先,官网下载python3的所需版本. wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz 想下载到那个文件夹下就先进入到 ...