数学公式-矩形

矩形数目


在一个n*m的矩形中,请问有多少个矩形、长方形、正方形?

:首先应该知道矩形=正方形+长方形,然后我们首先分析如何求解正方形的数量

  • 正方形求解

思想 :我们固定(i , j)点,以(i, j)点为右顶点,那么左顶点则应该从(i-1,j-1)点开始向左上角靠近,每次向左移动一格,左顶点在x ,y轴的投影-1,一直到某个方向的投影为0截止,因此一共min(i ,j)个正方形。

  • 矩形求解

思想 :同样我们以(i,j)为矩形的右端点,左端点则从(i-1,j-1)开始向左扩张,横向长度为j,竖向长度为i,所以一共有i*j个矩形

  • 长方形求解

利用上面的公式即可得到

因此我们只需要遍历整个棋盘即可求出数量,时间复杂度为O(n*m)

题目链接

  • 代码如下

// Problem: P2241 统计方形(数据加强版)
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P2241
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<cstdio>
#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
	int n,m;
	cin>>n>>m;
	
	unsigned long long s1=0,s2=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			{
				s1+=min(i,j);
				s2+=i*j;
			}
	cout<<s1<<" "<<s2-s1<<endl;
    return 0;
}

上一篇:1446.连续字符


下一篇:LeetCode——1446.连续字符