美文网首页
Chese Queue

Chese Queue

作者: Gitfan | 来源:发表于2017-03-28 18:03 被阅读0次

    https://vjudge.net/problem/UVA-11538
    题意:输出nm棋盘上放置两个互相攻击的皇后的个数。
    题解:
    分三种情况:1 、在同一行上放皇后,A(n,m)种
    2、在同一列放皇后,B(n,m)种
    3、在斜对角线上放皇后,D(n,m)种
    其中,A(n,m)=n
    m(m-1):先选其中一行,共有n种选择,然后在m列中进行排列。
    同理,B(n,m)=m
    n(n-1).
    对于情况3,假设n<=m;所有/方向的对角线,从左到右的长度为1,2,3,……n-1,n,n,……n,n(m-n+1个n),n-1,n-2,n-3……,3,2,1;
    对于长度为i的对角线,进行排列,i
    (i-1)种方式。
    那么这种对角线总和为:


    由于有两种对角线,还要乘以2
    #include<stdio.h>
    #include<algorithm>
    #include <string.h>
    using namespace std;
    typedef long long LL;
    int main()
    {
       LL n,m,ans;
       while(scanf("%lld%lld",&n,&m)!=EOF,n+m)
       {
           ans=n*m*(m-1)+m*n*(n-1);
           if(n>m) swap(n,m);
           printf("%lld\n",ans+2*n*(n-1)*(2*n-4)/3+2*(m-n+1)*n*(n-1));
       }
    }
    

    相关文章

      网友评论

          本文标题:Chese Queue

          本文链接:https://www.haomeiwen.com/subject/ldxsottx.html