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

uva 11538 - Chess Queen(数论)

2014-05-13 22:56 441 查看


题目链接:uva 11538 - Chess Queen

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

解题思路:因为皇后的攻击范围为竖线、横线和斜线,所以枚举每条上两个皇后放的位置,比如一条斜线有8个,那么放两个皇后的种数就有C(82)种。

行数n,每行m个位置C(m2)∗n

列数m,每列n个位置C(n2)∗m

斜线,2∗(2∗∑i=1n−1i∗(i−1)+(m−n+1)∗n∗(n−1)),因为正斜线和翻斜线,所以要乘以2

最后公式化简为2∗n∗(n−1)∗(3∗m−n−1)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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: