uva 11538 - Chess Queen(数论)

该博客讨论了如何在n*m棋盘上放置两个皇后,使它们能够互相攻击的问题。通过分析皇后的攻击范围,得出解决方案涉及计算不同方向的组合数,包括行、列和两条斜线。最终给出了问题的数学公式简化为2*n*(n-1)*(3*m-n-1)/3,用于计算可能的放置方式。

题目链接:uva 11538 - Chess Queen

题目大意:在一个nm的棋盘上,放两个皇后,要求两个皇后可以互相攻击,求有多少种放法。

解题思路:因为皇后的攻击范围为竖线、横线和斜线,所以枚举每条上两个皇后放的位置,比如一条斜线有8个,那么放两个皇后的种数就有C(82)种。
行数n,每行m个位置C(m2)n
列数m,每列n个位置C(n2)m
斜线,2(2i=1n1i(i1)+(mn+1)n(n1)),因为正斜线和翻斜线,所以要乘以2
最后公式化简为2n(n1)(3mn1)3

代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>

using namespace std;
typedef unsigned long long ll;

ll n, m;
int main () {
    while (cin >> n >> m) {
        if (!(n + m))
            break;

        if (m < n)
            swap(n, m);

        cout << n * m * (n+m-2) + 2 * n * (n-1)*(3*m-n-1)/3 << endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值