题目描述
小明有一套玩具,一共包含NxM个部件。这些部件摆放在一个包含NxM个小格子的玩具盒中,每个小格子中恰好摆放一个部件。

每一个部件上标记有一个0~9的整数,有可能有多个部件标记相同的整数。

小明对玩具的摆放有特殊的要求:标记相同整数的部件必须摆在一起,组成一个矩形形状。

如以下摆放是满足要求的:

00022
00033
44444

12244
12244
12233

01234
56789

以下摆放不满足要求:

11122
11122
33311

111111
122221
122221
111111

11122
11113
33333

给出一种摆放方式,请你判断是否符合小明的要求。
输入
输入包含多组数据。
第一行包含一个整数T,代表数据组数。 (1 <= T <= 10)
以下包含T组数据。
每组数据第一行包含两个整数N和M。 (1 <= N, M <= 10)
以下包含N行M列的矩阵,代表摆放方式。
输出
对于每组数据,输出YES或者NO代表是否符合小明的要求。
样例输入
3
3 5
00022
00033
44444
3 5
11122
11122
33311
2 5
01234
56789
样例输出
YES
NO
YES
思路:我以为这个题挺难的呢,因为看dotcpp上面的通过率不高。但是数据量很小,就算是暴力的话,也应该能过。我用了树状数组,但是时间复杂度还是挺高的。
我的办法是:对于x,我们分别往右往下遍历,找到这样一个矩形,判断这个矩形元素和。找元素和用树状数组节省时间。如果说这个矩形中元素都是x,就符合条件。否则就不符合。如果当前的这个元素,之前已经处理过了,就说明不符合条件。对于符合条件的,已经处理过的元素,我们将它处理成-1,以免重复处理。这一过程我用的二重循环,在这里会浪费时间,不知道有没有什么好办法。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=15;
int c[maxx][maxx];
int a[maxx][maxx];
int vis[maxx];
int n,m;inline int lowbit(int x){return x&-x;}
inline void update(int x,int y,int v)
{while(x<maxx){int ty=y;while(ty<maxx){c[x][ty]+=v;ty+=lowbit(ty);}x+=lowbit(x);}
}
inline int query(int x,int y)
{int ans=0;while(x){int ty=y;while(ty){ans+=c[x][ty];ty-=lowbit(ty);}x-=lowbit(x);}return ans;
}
int main()
{int t;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%1d",&a[i][j]);memset(c,0,sizeof(c));memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) update(i,j,a[i][j]);int flag=1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]==-1) continue;if(vis[a[i][j]]) {flag=0;break;}int x=i,y=j;while(a[x][j]==a[i][j]&&x<=n) x++;while(a[i][y]==a[i][j]&&y<=m) y++;x-=1;y-=1;int sum=query(x,y)-query(x,j-1)-query(i-1,y)+query(i-1,j-1);if(sum!=a[i][j]*(x-i+1)*(y-j+1)) {flag=0;break;}vis[a[i][j]]=1;for(int kk=i;kk<=x;kk++) for(int zz=j;zz<=y;zz++) a[kk][zz]=-1;}if(!flag) break;}if(flag) cout<<"YES"<<endl;else cout<<"NO"<<endl;}
}

ps:二维树状数组在处理这种二维矩阵的元素和上,真的挺有优势的。
努力加油a啊,(o)/~

[蓝桥杯][2018年第九届真题]整理玩具(树状数组)相关推荐

  1. C++ 字符串流stringstream(附蓝桥杯2018年第九届真题缩位求和题解)

    一.stringstream介绍 stringstream是 C++ 提供的一个字符串流(stream),,必须包含其头文件: #include <sstream> < sstrea ...

  2. [蓝桥杯][2018年第九届真题]小朋友崇拜圈、耐摔指数、堆的计数、缩位求和、约瑟夫环

    个人题解链接,蓝桥杯历届试题,正在更新中~ 文章目录 个人题解链接,蓝桥杯历届试题,正在更新中~ 小朋友崇拜圈 耐摔指数 堆的计数 缩位求和 约瑟夫环 小朋友崇拜圈 题目描述 班里N个小朋友,每个人都 ...

  3. [蓝桥杯][2018年第九届真题]调手表(BFS)

    题目描述 小明买了块高端大气上档次的电子手表,他正准备调时间呢. 在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在 ...

  4. [蓝桥杯][2018年第九届真题]版本分支(离线LCA模板)

    题目描述 小明负责维护公司一个奇怪的项目.这个项目的代码一直在不断分支(branch)但是从未发生过合并(merge). 现在这个项目的代码一共有N个版本,编号1~N,其中1号版本是最初的版本. 除了 ...

  5. [蓝桥杯][2018年第九届真题]调手表-bfs

    小明买了块高端大气上档次的电子手表,他正准备调时间呢.在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟.大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时候, ...

  6. [蓝桥杯][2018年第九届真题]全球变暖

    全球变暖 题目描述 思路解析 AC代码 题目描述 你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: ....... .##.... . ...

  7. 题目 2194: 蓝桥杯2018年第九届真题-递增三元组

    答题记录: 第一次做:答案错误  审题出错 第二次做:时间超限,用了3 个for循环 做了13'分钟 代码出错: for循环中循环变量写错 第三次做:答案正确,用哈希表化简时间复杂度,(减少一个for ...

  8. 蓝桥杯2018年第九届真题——乘积尾零

    乘积尾零 一.题目内容 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 如下的 10 行数据,每行有 10 个整数,请你求出它们的乘积的末尾有多少个零? 5650 4542 ...

  9. [蓝桥杯][2018年第九届真题] 递增三元组、螺旋折线、日志统计、全球变暖、乘积最大

    个人题解链接,历届试题,正在更新中~ 题目目录 递增三元组 螺旋折线 日志统计 全球变暖 乘积最大 递增三元组 给定三个整数数组 A = [A1, A2, - AN], B = [B1, B2, - ...

最新文章

  1. CISCO-生成树-安全保护配置
  2. 【vSphere系列二】安装 Openfiler 存储
  3. Ubuntu报错:sudo 无法解析的主机
  4. 安装SQL2005 29506错误码的解决方案
  5. 小白学编程“Java小白”入门解疑大全
  6. url(r'^index/$',views.index)的含义解释
  7. 泛型类java_Java泛型 - 通用类( Generic Classes)
  8. vue watch 经常监听不到_Vue.js中 watch(深度监听)的最易懂的解释
  9. C++ 双端队列deque
  10. java设计模式工厂模式_Java中的外观设计模式
  11. bat脚本获取管理员权限
  12. Vmware安装BT5进入不了图形界面怎么办(KDE版)
  13. 向工程腐化开炮 | proguard治理
  14. CentOS怎样添加字体
  15. workman 是什么
  16. 创建第一个SpringBoot项目
  17. 用 python 绘制玫瑰花
  18. 在mysql中如何为连接添加索引_在MySQL中如何为连接添加索引
  19. Variational graph auto-encoders (VGAE)
  20. 国内外的几十个测试学习网站

热门文章

  1. WinSock API网络编程——TCP/IP协议详解
  2. pythontry参数_Python ——Try Except
  3. 剑指offer(17)树的子结构
  4. Linux虚拟机改中文
  5. 去除bootstrap中input输入框的蓝色光
  6. 积累bootstrap的一些知识
  7. 湖南大学C语言作业用oj吗,湖南大学C语言题库(含答案)
  8. getvalue参数计数不匹配_OpenCV开发笔记(六十八):红胖子8分钟带你使用特征点Flann最邻近差值匹配识别...
  9. QFontDatabase: Cannot find font directory
  10. osg专业名词:LOD、数据分页、动态调度