uva 11538 - Chess Queen(数论)

来源:互联网 发布:淘宝网店怎么设置客服 编辑:程序博客网 时间:2024/06/07 04:04

题目链接: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;}
1 0
原创粉丝点击