统计方形(数据加强版)
题目背景
1997年普及组第一题
题目描述
有一个 n × m n \times m n×m 方格的棋盘,求其方格包含多少正方形、长方形(不包含正方形)。
输入格式
一行,两个正整数 n , m n,m n,m( n ≤ 5000 , m ≤ 5000 n \leq 5000,m \leq 5000 n≤5000,m≤5000)。
输出格式
一行,两个正整数,分别表示方格包含多少正方形、长方形(不包含正方形)。
样例 #1
样例输入 #1
2 3
样例输出 #1
8 10
思路分析
1.正方形
对于每一个 i , j 对应的方格而言,正方形的数量是 min( i, j )
2.长方形
我们得知道长方形的数量是等于矩形的数量减去正方形的数量
对于每一个 i ,j 矩形的数量是 i * j
用这个数量减去正方形的数量就是长方形的数量
3.注意点
数据范围是5000,这里 5000 * 5000 = 25 000 000 ,需要用 long long 来接,不然会 RE
Demo
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int main()
{
ll n,m,i,j,sum=0,sum1=0;
cin>>n>>m;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
sum+=min(i,j);
sum1+=i*j;
}
}
cout<<sum<<" "<<sum1-sum<<endl;
return 0;
}