洛谷[P2241 统计方形(数据加强版)]
题目背景
1997年普及组第一题
题目描述
有一个n*m方格的棋盘,求其方格包含多少正方形、长方形
输入格式
n,m因为原来数据太弱,现规定m小于等于5000,n小于等于5000(原来是100,100)
输出格式
方格包含多少正方形、长方形
输入输出样例
输入
2 3
输出
8 10
解题思路
样例分析
正方形:
1、边长为1,个数为(n-0)(m-0)=6。

2、边长为2,个数为(n-1)(m-1)=2。

故若有nm个方格,取边长为a的正方形,那么边长为a的正方形的个数为(n-(a-1))(m-(a-1))。
长方形
1、长度i为1,宽度为j=2,个数为(n-0)(m-1)=2×2=4。

2、长度i为2,宽度为j=1,个数为(n-1)(m-0)=1×3=3。

故若有nm个方格,取长为a,宽为b,那么长为a宽为b的长方形的个数为(n-(a-1))(m-(b-1))。
具体实现见代码:
完整代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll zheng,chang;
int main()
{
int n,m;
scanf("%d %d",&n,&m);
for(int i=0 ;i<=n;i++)
{
for(int j=0;j<=m;j++)
{
if(i==j) zheng+=(n-i)*(m-j);//正方形个数 ,正方形边长为i+1
else chang+=(n-i)*(m-j);//长方形个数 ,长方形长为j+1(横向),宽为i+1(纵向)
}
}
printf("%lld %lld",zheng,chang);
return 0;
}
本文详细解析洛谷P2241统计方形(数据加强版)的算法实现,针对n*m方格棋盘,计算其中包含的正方形与长方形数量。通过双层循环迭代,计算不同边长的正方形与长方形个数,最终得出总数量。
2855

被折叠的 条评论
为什么被折叠?



