题意:给你个n*m的棋盘,问你有多少种方法放置两个相互攻击的皇后?
Sol:利用加法原理A+B+C(A:同一行的方案数,B:同一列的方案数,C:对角线的方案数)
A=nm(m-1) B=nm(n-1) C=(2n(n-1)(3m-n-1))/3 ;
#include <cstdio>
#include <algorithm>
using namespace std;
typedef unsigned long long ULL;
int main()
{
ULL n,m;
while(~scanf("%lld%lld",&n,&m),n+m)
{
if(n>m) swap(n,m);
ULL ans=n*m*(n+m-2)+2*n*(n-1)*(3*m-n-1)/3;
printf("%lld\n",ans);
}
return 0;
}