首页 > 代码库 > uva 11538 - Chess Queen(数论)
uva 11538 - Chess Queen(数论)
题目链接: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;
}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。