意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

noip1997 棋盘 (数列求和)

来源:恒创科技 编辑:恒创科技编辑部
2024-02-04 11:36:59


A1108. 棋盘



noip1997 棋盘 (数列求和)

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时,即为正方形,否则即为长方形。

noip1997 棋盘 (数列求和)_几何


代码:

这个是交到 ​​ 洛谷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;
}



上一篇: hdu2066 一个人的旅行 (floyd) 下一篇: 手机怎么远程登录云服务器?