首页 > 其他分享 >51 nod 1851 俄罗斯方块

51 nod 1851 俄罗斯方块

时间:2022-11-22 19:06:43浏览次数:69  
标签:do begin end nod 1851 51 writeln Yes 方块


​1851 俄罗斯方块​


基准时间限制:1 秒 空间限制:131072 KB 分值: 160  ​​难度:6级算法题​




 



51 nod 1851 俄罗斯方块_51nod

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


求能否将图变成全白

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:




51 nod 1851 俄罗斯方块_俄罗斯方块_02

+


51 nod 1851 俄罗斯方块_俄罗斯方块_03

=


51 nod 1851 俄罗斯方块_俄罗斯方块_04


操作2:



51 nod 1851 俄罗斯方块_51nod_05

+

51 nod 1851 俄罗斯方块_51nod_06

=

51 nod 1851 俄罗斯方块_复杂度_07


操作3:



51 nod 1851 俄罗斯方块_数据_08

+

51 nod 1851 俄罗斯方块_俄罗斯方块_09

=

51 nod 1851 俄罗斯方块_复杂度_10


上述操作都可以认为是将某个黑格平移,或者是两两抵消

但是有条件限制:需要一个 2*3 的空间

所以当棋盘上能创造一个 2*3 的空间时,只需要判断黑格个数的奇偶性即可,奇数为 No,偶数为 Yes

那么假如棋盘小于 2*3 呢?

两种情况:2*2 和 1*?

2*2 只需要考虑2*2的正方形方块即可

1*? 的情况我们只能用 1*4 的方块,所以我们可以用贪心的解法,就每次选取最左端的黑格,以此作为 1*4 方块的左侧进行黑白反转,重复进行直到无法将 1*4 放置在棋盘上,这时候再判断棋盘是否为全白即可(n可能会很大哦!)

var
t,k,n,m,sum,i,j,q:longint;p,f:boolean;s:string;
a:array[1..10000,1..10000] of boolean;
begin
readln(t);
for k:=1 to t do
begin
readln(n,m);
{if (t=1)and(n=3000000)and(m=1) then
begin
writeln('No');break;
end;}
sum:=0;
for i:=1 to n do
begin
readln(s);
for j:=1 to m do
if s[j]='1' then
begin
a[i,j]:=true;
inc(sum);
end else a[i,j]:=false;
end;
if n>m then
begin
for i:=1 to n do
for j:=1 to m do
begin
p:=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) then
begin
if sum mod 2=1 then writeln('No') else writeln('Yes');
continue;
end;
if (n=2)and(m=2) then
begin
if (sum=4)or(sum=0) then writeln('Yes') else writeln('No');
continue;
end;
if n=1 then
begin
for i:=1 to m-3 do
if a[1,i] then
for j:=0 to 3 do
a[1,i+j]:=not(a[1,i+j]);
f:=true;
for i:=1 to m do
if a[1,i]=true then
begin
f:=false;break;
end;
if f then writeln('Yes') else writeln('No');
end;
end;
end.

标签:do,begin,end,nod,1851,51,writeln,Yes,方块
From: https://blog.51cto.com/u_15888102/5878341

相关文章

  • 51 nod 算法马拉松28 先序遍历与后序遍历
     ​​先序遍历与后序遍历​​ ​​​Scape​​​ (命题人)​​​tangjz​​​ (测试)基准时间限制:1 秒空间限制:131072 KB分值: 40对于给定......
  • Keil软件 fail to excute "C://C51//BIN//C51.exe"解决方案
    原因:编译器的路径因修改过而导致的错误解决方法:重新设置编译器的默认路径1、在Project->Components,Environment,Books...  2、Folders/Extensions 修改ToolB......
  • DOM_Node对象与案例4_动态表格_添加
    DOM_Node对象节点可以是元素节点、属性节点、文本节点,或者也可以是"节点类型"那一节中所介绍的任何一种节点。请注意,虽然所有的对象均能继承用于处理父节点和子节点的属性......
  • node 连接MySQL
    使用node创建一个服务端比java简单多,下面创建一个node服务端,连接MySQL并且将数据在浏览器显示出来一.node创建服务端案例varhttp=require("http");http.createSe......
  • nodejs02
    Express快速创建Web服务器express的基本使用先安装express包npmiexpress@4.17.11.导入expressconstexpress=require('express');2.创建web服务器cons......
  • [ERROR] mariadbd: The table 'INNODB_BUFFER_PAGE' is full
    问题描述:将information_schema导出sql文件到新库中恢复,sql中的表都是临时表,存储引擎都是memory,在导入的过程中实际大量会占用临时表。报错信息:ERROR1114(HY000)atline......
  • 安装指定node版本(适用windows)
    一开始在网上查了很多什么“n版本管理”还有“nvm”,感觉都不如直接覆盖来的痛快第一步:在官网找到自己想要的版本,网址:https://nodejs.org/dist/,下载.msi安装包我下载的......
  • node.js安装及环境配置超详细教程【Windows系统安装包方式】
    文章目录Step1:下载安装包Step2:安装程序Step3:查看Step4:环境配置最后补充:Step1:下载安装包https://nodejs.org/zh-cn/download/根据自己电脑系统及位数选择,我的电......
  • 51nod 1165 整边直角三角形的数量 【数学:公式--求约数】
    1165 整边直角三角形的数量基准时间限制:2 秒空间限制:131072 KB分值: 160 难度:6级算法题 收藏 关注直角三角形,三条边的长度都......
  • 51nod1079 中国剩余定理
    1079中国剩余定理基准时间限制:1秒空间限制:131072KB分值:0难度:基础题收藏 关注一个正整数K,给出KMod一些质数的结果,求符合条件的最小的......