CometOJ C0160 [1997普及组-A]棋盘

一、题目描述

在这里插入图片描述

二、算法分析说明

暴力
n × m的格子共有:
①nm + (n - 1)(m - 1) + … + (n - m + 1) × 1,n ≥ m
②nm + (n - 1)(m - 1) + … + (m - n + 1) × 1,n ≤ m
个正方形。
显然式子的每一项分别代表边长为1,2,……,min(m, n)的正方形。
上述表达式可以推广到非正方形的情况。例如n × m(n ≥ m)的格子有长和宽分别为a,b(a ≠ b,a ≤ n,b ≤ m)的长方形共
(n - a + 1)(n - b + 1) + (n - a + 2)(n - b + 2) + … + (n - m + 1) × 1
个。

三、AC 代码

#include<cstdio>
#pragma warning(disable:4996)
unsigned long long n, m, ns, nr;
inline void s() {
	for (unsigned long long i = n, j = m; i != 0 && j != 0; --i, --j) {
		ns += i * j;
	}
}
inline void r() {
	for (unsigned long long N = 1; N <= n; ++N) {
		for (unsigned long long M = 1; M <= m; ++M) {
			if (N == M)continue;
			nr += (n - N + 1) * (m - M + 1);
		}
	}
}
int main() {
	scanf("%llu%llu", &n, &m);
	s();
	r();
	printf("%llu %llu\n", ns, nr);
	return 0;
}
发布了214 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/COFACTOR/article/details/104122469
今日推荐