1851 俄罗斯方块
基准时间限制:1 秒 空间限制:131072 KB 分值: 160  难度:6级算法题

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

给一个黑白图,每次能将某些区域的格子黑白反转,至于某些区域的意思嘛,就是俄罗斯方块形状的区域咯(可水平翻转、上下翻转、旋转)

求能否将图变成全白
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
首先这题要求  O(nm)  的复杂度,这是读入复杂度,所以这启发我们去找规律,而不是去搜索

我们可以通过某些方块的奇怪组合来组成一些简单的操作
操作1:
+ =
操作2:
+ =
操作3:
+ =
上述操作都可以认为是将某个黑格平移,或者是两两抵消
但是有条件限制:需要一个 2*3 的空间
所以当棋盘上能创造一个 2*3 的空间时,只需要判断黑格个数的奇偶性即可,奇数为 No,偶数为 Yes
那么假如棋盘小于 2*3 呢?
两种情况:2*2 和 1*?
2*2 只需要考虑2*2的正方形方块即可
1*? 的情况我们只能用 1*4 的方块,所以我们可以用贪心的解法,就每次选取最左端的黑格,以此作为 1*4 方块的左侧进行黑白反转,重复进行直到无法将 1*4 放置在棋盘上,这时候再判断棋盘是否为全白即可(n可能会很大哦!)

My Code

vart,k,n,m,sum,i,j,q:longint;p,f:boolean;s:string;a:array[1..10000,1..10000] of boolean;
beginreadln(t);for k:=1 to t dobeginreadln(n,m);{if (t=1)and(n=3000000)and(m=1) thenbeginwriteln('No');break; end;}sum:=0;for i:=1 to n dobeginreadln(s);for j:=1 to m doif s[j]='1' thenbegina[i,j]:=true;inc(sum);end else a[i,j]:=false;end;if n>m thenbeginfor i:=1 to n dofor j:=1 to m dobeginp:=a[i,j];a[i,j]:=a[j,i];a[j,i]:=p;end;q:=n;n:=m;m:=q;end;if (n>=2)and(m>=3) thenbeginif sum mod 2=1 then writeln('No') else writeln('Yes');continue;end;if (n=2)and(m=2) thenbeginif (sum=4)or(sum=0) then writeln('Yes') else writeln('No');continue;end;if n=1 thenbeginfor i:=1 to m-3 doif a[1,i] thenfor j:=0 to 3 doa[1,i+j]:=not(a[1,i+j]);f:=true;for i:=1 to m doif a[1,i]=true thenbeginf:=false;break;end;if f then writeln('Yes') else writeln('No');end;end;
end.

51 nod 1851 俄罗斯方块相关推荐

  1. 51 nod 1427 文明 (并查集 + 树的直径)

    1427 文明 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 安德鲁在玩一个叫"文明"的游戏.大妈正在 ...

  2. 51 nod 1405 树的距离之和

    1405 树的距离之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之和. ...

  3. 51 nod 1439 互质对(Moblus容斥)

    1439 互质对 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 有n个数字,a[1],a[2],-,a[n].有一个集合,刚开 ...

  4. [STL乱搞]51 Nod——1573 美丽的集合

    [STL乱搞]51 Nod--1573 美丽的集合 题目梗概 在多重集之中,同一个元素可以出现多次. 我们现在有n个多重集合,第i个集合最开始都有一个元素ai(1≤i≤n). 定义多重集合的价值为子集 ...

  5. 51 nod 1006 最长公共子序列Lcs

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1006 参考博客 :http://blog.csdn.net/yysdsy ...

  6. 基于51单片机的俄罗斯方块小游戏

    目录 开发环境 设计文档 之后将完善的内容 用到的各个驱动函数 源文件 开发环境 16 × 16 点阵 6 位数码管 4 × 4 矩阵按键 设计文档 点阵 点阵被竖着对称着的分为两个区域,其中左屏用来 ...

  7. 51 Nod 1366 贫富差距

                               1366 贫富差距 一个国家有N个公民,标记为0,1,2,...,N-1,每个公民有一个存款额.已知每个公民有一些朋友,同时国家有一条规定朋友间的 ...

  8. 51 nod 机器人走方格

    从一个长方形的方格的右上角 走到 左下角 , 问一共有多少种不同的路线可以达到 . 1 #include<stdio.h> 2 #include<string.h> 3 #in ...

  9. 51 nod 1049 最大子段和 (简单dp)

    1049 最大子段和  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 N个整数组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+- ...

最新文章

  1. leetcode-【中等题】5. Longest Palindromic Substring
  2. 地理文本处理技术在高德的演进(上)+
  3. 小白学Python——Anaconda安装
  4. Eclipse 皮肤
  5. 【Elasticsearch】ELASTICSEARCH集群节点的扩容(移除与添加)
  6. python的软件环境是什么意思_python的虚拟环境详解
  7. sql server期中综合练习
  8. CentOS 7.5 安装MySQL教程
  9. python判断性别_惊呆|根据三围数据判断出用户性别竟是python使用逻辑回归算法搞的鬼!...
  10. mysql error code: 1205_Mysql错误:ERROR 1205 (HY000): Lock wait timeout exceeded解决办法
  11. [渝粤教育] 天水师范学院 高等数学(一) 参考 资料
  12. 修改opencv3.4 VideoCapture dshow模块以支持圆刚cv710等需要配置CrossBar的采集卡
  13. Junit 的 @RunWith():Runner,即Junit的运行器
  14. hypixel服务器显示无法登录,我的世界hypixel服务器盗版可以登录?
  15. Windows10 深度美化
  16. 临时解决新款macbookpro m1pro刘海屏遮住部分菜单栏应用的问题
  17. 学习TDD:TDD的好处
  18. ProgressDialog在线程里下载图片
  19. Android列表ListView控件的使用
  20. 高斯-赛德尔迭代(Gauss–Seidel method)c语言实现

热门文章

  1. 电商平台资金结算流程是什么样的?
  2. 【第9天】道歉不仅仅是认错
  3. rabbitmq消息队列入门到整合springboot(篇幅较长内容详细)
  4. wps多人协作的意义_怎么能快速体验WPS加载项
  5. 陋室快报 | BERT主流衍生语言模型-20211106
  6. Linux惊群效应详解
  7. nginx文件服务器美化autoindex显示
  8. java关键字sizeof_sizeof()用法总结
  9. 斐波那契,ACM,用表(vector)实现
  10. 【ZYNQ】ZYNQ7000 UART 控制器及驱动应用示例