数正方形

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

小B正在做一个关于图像理解方面的研究,她的目标是识别图像中的轮廓。当前阶段,她希望能够识别正方形。图像用一个矩阵表示,矩阵的每个元素对应于图像中的一个像素点,值为0或1,0表示背景,1表示前景。需要寻找的正方形必须满足线宽为单像素,且大小至少为2x2。她希望你能帮她找出图像中满足如下条件的两类正方形:

  1. 正方形的边与矩阵边缘平行;
  2. 正方形的边与矩阵对角线平行;

如以下矩阵中只有一个第一类正方形:

0000000

0111100

0100100

0100100

0111100

以下的矩阵中只有一个第二类正方形:

0000000

0010000

0101000

0010000

0000000

此外,不管何种类型的正方形,其每条边必须等长,且不能有任何边或顶点的像素与不属于该正方形的像素相连接。

输入

输入中有多组测试数据。第一行为一个整数t(1 =< t =< 10000),表示测试数据的组数,接下来是t组测试数据。每组测试数据的第一行为两个整数n和m(2<=n, m<=250),n和m分别为矩阵的行数和列数,接下来是n行数据,每行由m个0或1构成。

每个测试输入中的字符数不超过10^6个。

输出

对每组测试数据,在单独的行中输出矩阵中符合要求的正方形的数量。

样例输入

3

8 8

00010001

00101000

01000100

10000010

01000100

00101000

11010011

11000011

10 10

1111111000

1000001000

1011001000

1011001010

1000001101

1001001010

1010101000

1001001000

1000001000

1111111000

12 11

11111111111

10000000001

10111111101

10100000101

10101100101

10101100101

10100000101

10100000101

10111111101

10000000001

11111111111

00000000000

样例输出

1

2

3

时间: 2024-10-11 05:32:10

数正方形的相关文章

一道职业能力测试题: 数正方形的个数

如图, 数图中各种正方形的个数. 1. 找到少于40个的需要重修九年制义务教育的数学课程; 2. 找出40个的可以作程序员; 3. 找出40个以上的可以管程序员

校赛低年级组解题报告,,,by五楼team

/*写在最前面: 我的代码不是最优的,也许蛮丑的,,, 不过,能A,(不要在意这些细节 如果看不懂,请联系我,我再做补充 由于学校oj有点坑爹,这里就把题目贴上来了 C题和F题的代码有cdm提供 */ A:矩形面积 一条绳子,用这个绳子可以围成的最大矩形的面积是多少 题目不贴了,相信大家都秒了,,, #include<cstdio> #include<iostream> using namespace std; int main(){ int T,n;scanf("%d&

11.10晚间练习赛 一套全场爆零的好题

11.10晚间练习赛 一套全场爆零的好题 nodgd改的题面是真的令人不解 T1 数正方形 题面: 在\(N * N\)的点阵中任取4个点,回答: 问题1:这4个点恰好是"正放"的正方形的4个顶点的方案数是多少? 问题2:这4个点恰好是正方形(包括"正放"和"斜放")的4个顶点的方案数是多少? 下图为一个4*4的点阵,左图表示一种"正放"的方案,右图表示一种"斜放"的方案. ------ 看出来了就是水题

poj2002Squares(点集组成正方形数)

链接 可以枚举两个点,因为是正方形两外两点可以由已知求出,据说可以根据三角形全等求出下列式子,数学渣不会证... 已知: (x1,y1)  (x2,y2) 则:   x3=x1+(y1-y2)   y3= y1-(x1-x2) x4=x2+(y1-y2)   y4= y2-(x1-x2) 或 x3=x1-(y1-y2)   y3= y1+(x1-x2) x4=x2-(y1-y2)   y4= y2+(x1-x2) 然后就可以hash或者二分做了,这里只用hash做的 应该算是简单的hash解决冲

[HAOI2007]理想的正方形

题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数.每行相邻两数之间用一空格分隔. 输出格式: 仅一个整数,为a*b矩阵中所有"n*n正方形区域中的最大整数和最小整数的差值"的最小值. 输入输出样例 输入样例#1: 5 4 2 1 2 5 6 0 17 16 0 16 17 2 1 2

画正方形

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝"计算机科学教育周"正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形.现在你也跟他一起画吧! 输入格式: 输入在一行中给出正方形边长N(3<=N<=20)和组成正方形边的某种字符C,间隔一个空格. 输出格式: 输出由给定字符C画出的正方形.但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五

正方形大阵(C++)

正方形大阵 难度级别:D: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 输入 第一行一个正整数n代表询问次数. 接下来n行每行一个不超过八位的小数k代表一组询问. 输出 输出共n行,代表每次询问的答案:如果有无数个交点,输出"-1". 输入示例 30.3750.0010.478 输出示例 -1420 其他说明 100%的数据满足1<=n<2*1000,0<k<0.5.选自tyvj数学神题-- #inc

维数诅咒

介绍 在这篇文章中,我们将讨论所谓的"维数的诅咒",并解释为什么在设计分类器时它是很重要的.以下各节我会提供这个概念直观的解释,并用一个由于维数灾难导致的过拟合例子图解说明. 考虑这样一个例子,我们有一组图像,其中每个表示猫或狗.我们想创建一个分类器,它能够自动识别狗和猫.要做到这一点,我们首先需要考虑每个对象类的描述,该描述可以用数字来表示.这样的数学算法,即分类器,可以用这些数字来识别对象.例如,我们可以认为猫和狗有不同的颜色.区分这两个类的一种可能描述可以由三个数字组成:平均红色

[BZOJ1047][HAOI2007]理想的正方形

1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3481  Solved: 1917 [Submit][Status][Discuss] Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值 的差最小. Input 第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数.每 行相邻