uva 11538 Chess Queen

来源:互联网 发布:巴西经济现状数据 编辑:程序博客网 时间:2024/06/11 18:54
//uva 11538 Chess Queen////题目大意:////在 n * m 的棋盘中,放两个皇后,一个黑的,一个白的//求能让两个皇后相互攻击的放法,有多少种////解题思路:////皇后攻击的方式只有在同一行,同一列,或者同一对角线//上,分类讨论:////1): 同一行,则白的放法有 n * m 种,黑的放法有m-1种////2): 同一列,则白的方法有 m * n 种,黑的放法有n-1种////3): 同一对角线,则第一个皇后的方法沿对角线依次为//1,2,3....n-1,n,....,n,n-1,...,3,2,1,因为对角线//一共m+n-1条,两边各有n-1,则放n的有m-n+1种,则//对角线上方法为//sigma(i * (i-1)){ 1<=i<=n-1} * 2+ (m-n+1)*n*(n-1)//因为有两条对角线,主对角线和副对角线.这里应该再*2//再用unsigned long long 就over啦~~~~////感悟:////算法竞赛训练指南上的题目,实在是太美妙啦~~~继续加油~~~//FIGHTING#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef unsigned long long ull;int main(){ull n,m;//freopen("1.txt","r",stdin);while(cin >> n >> m){if (!n && !m)break;if (n > m)swap(n,m);ull x;x = n * (n - 1) * (2 * n - 1) / 6;x = x - n * (n - 1) / 2;x = x * 2;x = x + (m - n + 1) * n * (n - 1);x = x * 2;x = x + m * n * (m + n - 2);cout << x << endl;}}

0 0
原创粉丝点击