频道栏目
首页 > 资讯 > C++ > 正文

UVA - 11538 Chess Queen

14-02-12        来源:[db:作者]  
收藏   我要投稿

题意:在n*m的棋盘上,有多少种方法使得两个皇后相互攻击

思路:分三种情况:

1.同一行上的相互攻击:第一个皇后有n*m种方法,第二个皇后只有(m-1),同行不同列的方法

2.同一列上的相互攻击:同上

3.同一对角线上的攻击:设n<=m,那么 \ 对角线有:1,2,3,,,,n-1,n(m-n+1个),n-1,,,,2,1

另一个方向的也是如此,那么确定了第一个放皇后的位置后,另一个就好确定了

结果是:2 *(2*i(i-1){i 从1到n-1} + (n-m+1)*n*(n-1))

#include 
#include 
#include 
#include 
#include 
using namespace std;

unsigned long long n,m;

int main(){
    while (cin >> 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;
}



相关TAG标签
上一篇:POJ 3114 Countries in War / HDU 2767 Proving Equivalences 强连通分量模板
下一篇:Delphi函数参数中的陷阱
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站