UVA_11538
可以将两个皇后的位置分为横、竖、斜三种情况去计算,每种都可以总结出O(1)的计算公式。
#include<stdio.h> #include<string.h> #include<algorithm> typedef long long LL; int N, M; LL sum(int n) { return (LL) n * (n + 1) / 2; } LL sum2(int n) { return (LL)n * (n + 1) * (2 * n + 1) / 6; } int main() { while(scanf("%d%d", &N, &M), N && M) { LL ans = (LL)N * M * (N + M - 2); int n = std::min(N, M); ans += 2 * (sum2(n) + sum2(n - 1) - sum(n) - sum(n - 1)); ans += std::abs(N - M) * (LL)n * (n - 1) * 2; printf("%lld\n", ans); } return 0; }