您的位置:首页 > 产品设计 > UI/UE

【UVA11538】Chess Queen——简单组合

2016-03-24 19:54 435 查看
题意:给你一个n×mn \times m 的棋盘,在上面放两个皇后,(一黑一白)问有多少种放的方法

分析:皇后的攻击的范围为同一行或者同一列或者在同一对角线,这三种情况没有交集,利用加法原理,对于同一行的放置数目为A(n,m)=n×m×(m−1)A(n,m) = n\times m\times (m-1),同一列的放置为B(m,n)=m×n×(n−1)B(m,n) = m\times n \times (n-1)。

下面来求对角线的部分:假设n⩽mn\leqslant m,所以对角线的长度依次为 1,2,3,⋯,n−1,n,n⋯,n−1,n−2,⋯,3,2,11,2,3,\cdots ,n-1,n,n\cdots ,n-1,n-2,\cdots ,3,2,1,所以D(n,m)=2×[2∑i=1n−1i(i−1)+(m−n+1)n(n−1)]D(n,m) = 2\times [2\sum \limits_{i=1}^{n-1}i(i-1)+(m-n+1)n(n-1)] ,其中∑i=1n−1i(i−1)=∑i=1n−1i2−∑i=1n−1i=n(n−1)(2n−1)6−n(n−1)2=n(n−1)(2n−4)6\sum\limits_{i=1}^{n-1}i(i-1) = \sum\limits_{i=1}^{n-1}i^2-\sum\limits_{i=1}^{n-1}i = \frac{n(n-1)(2n-1)}{6} - \frac{n(n-1)}{2} = \frac{n(n-1)(2n-4)}{6} 所以 D(n,m)=2⟮n(n−1)(2n−4)3+(m−n+1)n(n−1)⟯=2n(n−1)(3m−n−1)3D(n,m) = 2\lgroup \frac{n(n-1)(2n-4)}{3}+(m-n+1)n(n-1)\rgroup = \frac{2n(n-1)(3m-n-1)}{3},所以ans=A(n,m)+B(m,n)+D(n,m)ans = A(n,m)+B(m,n)+D(n,m)

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>

using namespace std;

typedef long long LL;

LL n,m;

int main()
{
while(scanf("%lld %lld",&n,&m)&&(n+m))
{
if(n>m)
{
swap(n,m);
}

cout<<n*m*(m+n-2)+2*n*(n-1)*(3*m-n-1)/3<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: