矩形数目
在一个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;
}