您的位置:首页 > 其它

noip1997 棋盘 (数列求和)

2015-08-13 23:17 375 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: