题解:洛谷 P2241 统计方形(数据加强版)

【题目来源】

洛谷:P2241 统计方形(数据加强版) - 洛谷 (luogu.com.cn)

【题目描述】

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

【输入】

一行,两个正整数 \(n,m(n\le 5000,m\le 5000)\)

【输出】

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

【输入样例】

2 3

【输出样例】

8 10

【解题思路】

image

image

【算法标签】

《洛谷 P2241 统计方形(数据加强版)》 #数学# #枚举#

【代码详解】

#include <bits/stdc++.h>  // 包含常用的头文件
using namespace std;

int main()
{
    // 定义变量
    long long n, m, z = 0, c = 0;  // n 和 m 是输入的两个维度,z 和 c 是计算结果
    // 注意:5000*5000 的累加结果会超过 int 的最大范围,因此使用 long long

    // 输入 n 和 m
    cin >> n >> m;

    // 双重循环遍历 i 和 j
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            // 计算 z:累加 min(i, j)
            z += min(i, j);
            // 计算 c:累加 i*j - min(i, j)
            c += i * j - min(i, j);
        }
    }

    // 输出结果 z 和 c
    cout << z << " " << c;

    return 0;  // 程序结束
}

【运行结果】

2 3
8 10
posted @ 2026-02-17 15:45  团爸讲算法  阅读(12)  评论(0)    收藏  举报