程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> uva 11538 - Chess Queen(數論)

uva 11538 - Chess Queen(數論)

編輯:C++入門知識

題目鏈接: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 
#include 
#include 
#include 

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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved