noip1997 棋盘 (数列求和)
A1108. 棋盘
1.0s 内存限制: 256.0MB
613 AC次数: 435 平均分: 77.03
将本题分享到:
查看未格式化的试题 提交 试题讨论
试题来源
NOIP1997 普及组
问题描述
1.设有一个n*m方格的棋盘(1≤m,n≤100)。
求出该棋盘中包含多少个正方形、多少个长方形(不包括正方形)。
例如:当n=2,m=3时
正方形的个数有8个;即边长为1的正方形有6个;
边长为2的正方形有2个。
长方形的个数有10个;
即2*1的长方形有4个;
1*2的长方形有3个;
3*1的长方形有2个;
3*2的长方形有1个。
程序要求:输入:n和m 输出:正方形的个数与长方形的个数
输入格式
一行两个数N,M
输出格式
一行两个数,分别为正方形个数和长方形个数。
样例输入
2 3
样例输出
8 10
数据规模和约定
1≤m,n≤100
解析:用到了连续自然数平方和求和公式+等差数列求和公式。
假设n为长,m为宽,则与棋盘长平行边的长度为i,与棋盘宽平行的长度为j的矩形共有:
(n-i+1)*(m-j+1)
当i==j时,即为正方形,否则即为长方形。
代码:
这个是交到 洛谷2241统计方形 加强版 的代码,交清橙上的话,long long 可以改为int。
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
long long n,m,s1,s2;
scanf("%I64d%I64d",&n,&m);
if(m>n)swap(m,n);
s1=m*(m+1)*(3*n+1-m)/6;
s2=n*m*(n+1)*(m+1)/4;
printf("%I64d %I64d\n",s1,s2-s1);
return 0;
}
版权声明
本文仅代表作者观点,不代表博信信息网立场。