统计方形(数据加强版)——排列组合|何时开long long?

题目背景

1997年普及组第一题

题目描述

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

输入格式

一行,两个正整数 n,mn5000,m5000)。

输出格式

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

样例 #1

样例输入 #1

2 3

样例输出 #1

8 10

我的作答

#include <bits/stdc++.h>
using namespace std;
int main() {
long long m,n;
cin >> n >> m;
long long ju = (n * (n + 1) / 2) * (m * (m + 1) / 2);
long long zh = 0;
for (int i=1;i<=(m>n?n:m);i++) {
zh += (n-i+1)*(m-i+1);
}
long long ch = ju - zh;
cout << zh << " " << ch;
return 0;
}

总结

解题思路

  1. 正方形的数量
    遍历正方形的边长从1到min(m,n),以正方形的左上角为基准,找右下对角的点,可以看到边长为1时正方形数量mn,边长为2时(m-1)(n-1)……以此类推,for循环求和
  2. 矩形的数量
    确定一个矩形的方法——两横边两竖边,1个格子两条边,横纵分别m+1、n+1条边,排列组合m+1里找2、n+1里找2,相乘即可
  3. 长方形的数量
    除了正方形就是长方形,用矩形数量减去正方形数量

反思

当通过率有一半时,考虑很可能是int达到上限了,开long long。

发布于   xiins  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示