题意
将黑色皇后和白色皇后两个皇后放到一个 n * m的棋盘当中,使得她们能够相互攻击,请问有多少种放置方法?
分析
这道题用到了分类讨论的思想,如果两个皇后相互攻击,那么有三种情况,两者同列、两者同行、两者同对角线。同对角线的数量推起来稍微麻烦一点。然后将三种相加即可。
代码
c++
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
long long n, m;
int main(int argc, const char * argv[]) {
while(scanf("%lld%lld", &n, &m) != EOF){
if(!n && !m) break;
if(n > m) swap(n, m);
long long ans = n * m * (n + m -2) + 2 * n * (n - 1) * (3 * m - n - 1) / 3;
printf("%lld\n", ans);
}
return 0;
}