【暴力枚举】P2241 统计方形(数据加强版)
题目描述
有一个 n×m 方格的棋盘,求其方格包含多少正方形、长方形(不包含正方形)。
难度:普及-
算法:暴力枚举
思路:
关键点在于不重复的找正方形,长方形;
统计以新增的顶点作为右下角的顶点的正方形和长方形的个数
总结一下规律:
若(0,0) ~ (n,m) 的矩阵中正方形以及长方形的个数
(1)正方形的个数 min(n,m)
(2)矩形的个数 n * m ;
宽度为1 ~ n 的长方形的个数为 m个,因此总共有 n * m 个
(3)长方形的个数 = 矩形的个数 - 正方形的个数
C++代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 55;
int n,m;
int ans1,ans2;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
ans1 += min(i,j);
ans2 += i * j - min(i,j); //长方形的个数 - 正方形的个数
}
}
cout << ans1 << " " << ans2 << endl;
return 0;
}