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

 

 

posted on 2012-10-27 19:59  Staginner  阅读(235)  评论(0编辑  收藏  举报