统计方形(数据加强版)——排列组合|何时开long long?
题目背景
1997年普及组第一题
题目描述
有一个
输入格式
一行,两个正整数
输出格式
一行,两个正整数,分别表示方格包含多少正方形、长方形(不包含正方形)。
样例 #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到min(m,n),以正方形的左上角为基准,找右下对角的点,可以看到边长为1时正方形数量mn,边长为2时(m-1)(n-1)……以此类推,for循环求和 - 矩形的数量
确定一个矩形的方法——两横边两竖边,1个格子两条边,横纵分别m+1、n+1条边,排列组合m+1里找2、n+1里找2,相乘即可 - 长方形的数量
除了正方形就是长方形,用矩形数量减去正方形数量
反思
当通过率有一半时,考虑很可能是int达到上限了,开long long。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律