Bootstrap

CSP/信奥赛C++语法基础刷题训练(34):洛谷P2241:统计方形

CSP/信奥赛C++语法基础刷题训练(34):洛谷P2241:统计方形

在这里插入图片描述

题目背景

1997年普及组第一题

题目描述

有一个 n × m n \times m n×m 方格的棋盘,求其方格包含多少正方形、长方形(不包含正方形)。

输入格式

一行,两个正整数 n , m n,m n,m n ≤ 5000 , m ≤ 5000 n \leq 5000,m \leq 5000 n5000,m5000)。

输出格式

一行,两个正整数,分别表示方格包含多少正方形、长方形(不包含正方形)。

样例 #1

样例输入 #1

2 3

样例输出 #1

8 10

AC代码

#include<bits/stdc++.h>
using namespace std;
/*枚举 
	枚举每一个格子,看以它为左上角的矩形共有多少个
	以x,y为左上角坐标的矩形个数:(n-x)*(m-y)
	以x,y为左上角坐标的正方形个数:min(n-x,m-y)
	以上规律,同学们可以画出就能轻松分析出来
	另外注意:本题要开long long	
*/
long long n,m,ans1=0,ans2=0; //ans1统计矩形总数,ans2统计正方形总数 
void cnt(int x,int y){//以x,y为左上角坐标,统计其方形个数 
	ans1+=(n-x)*(m-y);//矩形总数 
	ans2+=min(n-x,m-y);//正方形个数 
}
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cnt(i,j);
		}
	}
	cout<<ans2<<" "<<ans1-ans2;//长方形个数=矩形个数-正方形个数 
	return 0;
} 

文末彩蛋:

点击王老师青少年编程主页有更多精彩内容

;