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;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值