在做这道题之前我们先了解一下棋盘问题

棋盘问题 (qq.com)

对于棋盘问题,我们可以得出对于一个n*n的正方形方格阵如何求其包含的正方形个数

      也就是数每个正方形的中间点,然后将其点排列成矩阵,对于其中m*m规格的正方形,其个数为(n-m-1)*(n-m-1)-

现在回到我们这道题,他的要求就更普适化,要在一般的矩形里来分别找正方形以及不包括正方形的矩形。但是对于一个m*n的矩形,其包含的k*k规格的正方形,仍然满足上述规律

也就是说对于k*k的正方形,其个数为(m-k-1)(n-k-1)

给出一个例子

这是一个4*5的矩形

对于其中2*2的正方形,我们仍旧可以仿照上述来找中心点来计数,如下

可以看出由于2*2的矩形的边界效应,也就是其边界上的正方形区域所以其中心点矩阵正好是3*4,也就是4*5减去占用边界的1格

同理对于3*3正方形

可以看出其中心矩阵为2*3,也就是4*5减去占用边界的1.5格(取整即为2)4-2=2,5-2=3,即向内缩进一圈

由此可以知道计算纯正方形个数的规律对于一个m*n的矩阵其中k*k正方形个数为(m-k-1)(n-k-1),但是其中最大的正方形边长为min(m,n)

计算完正方形,对于一个m*n的矩形,我们想办法求出其矩形(包含正方形)的个数

由小学高中学过的排列组合可知道,一个矩形由两条竖边和两条横边组成,因此只需要在方格图中任选两条竖边和任选两条横边并组合起来就可以得到矩形的个数

这样一来我们就求出了正方形的个数和矩形的个数,因此不包含正方形的矩形的个数就是       所有矩形的个数-正方形的个数

思路解决,下附上AC代码

    cin >> n >> m;
long long NumOfC = 0;//所有矩形个数
long long N = 1, M = 1;
for (int k = 0; k<2; k++)
{
N *= (n+1 - k); M *= (m+1 - k);
}
NumOfC = (N / 2) * (M / 2);//求出所有矩形个数
int i = n; int j = m;
long long NumOfS = 0;//正方形个数
while (i >= 0 && j >= 0)
{
NumOfS += (i--) * (j--);//求出正方形个数,从m*n开始一直求到一方为0结束
}
cout << NumOfS << ' ' << NumOfC - NumOfS;//输出
}

洛谷P2241 统计方形 ,棋盘问题升级板,给出格子坐标中矩形以及正方形的计算方法的更多相关文章

  1. 洛谷 P2241统计方形(数据加强版) 题解

    题目传送门 说是加强版,其实可以把棋盘那道题的代码粘过来(注意要开long long): #include<bits/stdc++.h> using namespace std; ,c; ...

  2. 洛谷——P2241 统计方形(数据加强版)

    https://www.luogu.org/problem/show?pid=2241 题目背景 1997年普及组第一题 题目描述 有一个n*m方格的棋盘,求其方格包含多少正方形.长方形 输入输出格式 ...

  3. [洛谷] P2241 统计方形(数据加强版)

    点击查看代码 #include<bits/stdc++.h> using namespace std; long long n, m, total, sum1, sum2; int mai ...

  4. 洛谷P2241-统计方形-矩形内计算长方形和正方形的数量

    洛谷P2241-统计方形 题目描述: 有一个 \(n \times m\) 方格的棋盘,求其方格包含多少正方形.长方形(不包含正方形). 思路: 所有方形的个数=正方形的个数+长方形的个数.对于任意一 ...

  5. 洛谷 P1169||bzoj1057 [ZJOI2007]棋盘制作

    洛谷P1169 bzoj1057 这个题目跟最大全0子矩阵是类似的.正方形的话,只要把任意极大子正方形(”极大“定义见后面的”论文“)当成把某个极大子矩形去掉一块变成正方形即可,容易解决. 解法1:看 ...

  6. luogu P2241 统计方形

    题目背景 1997年普及组第一题 题目描述 有一个n*m方格的棋盘,求其方格包含多少正方形.长方形 输入输出格式 输入格式: n,m因为原来数据太弱,现规定m小于等于5000,n小于等于5000(原来 ...

  7. [洛谷P1169][题解][ZJOI2007]棋盘制作

    我不是题目的说 这道题运用了一种很巧妙的DP方式:悬线法 如图,蓝色为悬线,黄色为向两边延伸的长度 那么显然,最大子矩形的宽一定是这些黄线中最小的(证明从略) 所以我们可以维护三个数组: Up[i][ ...

  8. 洛谷 P1308 统计单词数【字符串+模拟】

    P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定 ...

  9. 【洛谷P1169】[ZJOI2007]棋盘制作

    棋盘制作 题目链接 这个题是[USACO5.3]巨大的牛棚Big Barn和玉蟾宫的结合 一道顶两道毒瘤! 题解: 首先,棋盘有两种选法: 1.任意白格(x,y) (x+y)%2=0 ,任意黑格(x, ...

  10. 洛谷 P1308 统计单词数【string类及其函数应用/STL】

    题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...

随机推荐

  1. mybatis-plus-QueryWrapper 如何写or效果的语句 以及如何给or加括号

    先说想要的结果 希望mybatis-plus中QueryWrapper写法生成的sql语句中查询条件是 WHERE (( (LOGIN_ID = ? OR SHI_JI_LOGIN_ID = ?) ) ...

  2. echarts 饼图 点击事件

    https://www.cnblogs.com/wcnwcn/p/11170279.html

  3. [转帖]NUMA导致的Oracle性能问题

    https://www.cnblogs.com/realcp1018/p/6903721.html 背景简介: Oracle版本:11.2.0.4 OS 版本:OEL5.8 在一次Oracle的Dat ...

  4. [转帖]jdbc连接mysql设置session variables 参数变量

    目录 两种方式 连接串设置[^1] 执行语句中设置 两种方式 url连接串中设置 执行语句中设置 连接串设置1 sessionVariables jdbc.url=jdbc:mysql://xxxx. ...

  5. Tidb 使用minio 进行br备份数据库的过程

    Tidb 使用minio 进行br备份数据库的过程 背景 br 备份恢复时一般需要共享存储. 前段时间一直使用的是nfs 进行共享文件备份. 这样需要所有的机器在 相同的目录下面挂载相同的nfs. 并 ...

  6. [转帖]docker build 中的 -f 选项

    https://www.jianshu.com/p/06c35fd299b7 需要注意的是,在 docker build 命令接收的参数中,提供给 docker build 命令的 -f 选项应该 D ...

  7. [转帖]jar启动指定JDK/JRE 安装路径教程

    https://blog.csdn.net/weixin_40986713/article/details/128136777 前言 因为疫情在家办公的缘故,有个老项目,需要改个接口,然后需要前端联调 ...

  8. 什么是根号?什么是 log ?

    生日悖论是 \(O(\sqrt{n})\) 随机序列 LIS 是 \(O(\sqrt{n})\) 随机 \(\pm1\) 序列前缀和最大绝对值是 \(O(\sqrt{n})\) 证明 随机 Prufe ...

  9. js中forEach的用法、forEach如何跳出循环、forEach与for之间的区别

    定义和用法 forEach() 调用数组的每个元素,并将元素传递给回调函数. 注意: forEach() 对于空数组是不会执行回调函数的. 用法: array.forEach(function(cur ...

  10. Go 复合数据类型之结构体与自定义类型

    Go 复合数据类型之结构体与自定义类型 目录 Go 复合数据类型之结构体与自定义类型 一.类型别名和自定义类型 1.1 类型定义(Type Definition) 简单示例 1.2 类型别名 简单示例 ...