1. 程式人生 > >HDU5100 Chessboard【組合數學】

HDU5100 Chessboard【組合數學】

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 1222    Accepted Submission(s): 526
Problem DescriptionConsider the problem of tiling an n×n chessboard by polyomino pieces that are k×1 in size; Every one of the k pieces of each polyomino tile must align exactly with one of the chessboard squares. Your task is to figure out the maximum number of chessboard squares tiled.InputThere are multiple test cases in the input file.
First line contain the number of cases T (T
10000
).
In the next T lines contain T cases , Each case has two integers n and k. (1n,k100)OutputPrint the maximum number of chessboard squares tiled.Sample Input2 6 3 5 3Sample Output36 24Source

問題簡述:(略)

問題分析這是一個組合數學問題,計算原理參見參考連結。

程式說明:(略)

題記:(略)

AC的C++語言程式如下:

/* HDU5100 Chessboard */

#include <iostream>

using namespace std;

int getnum(int n, int k)
{
    if(n < k)
        return 0;
    int m = n % k;
    if(m <= k / 2)
        return n * n - m * m;
    else
        return n * n - (k - m) *(k - m);
}

int main()
{
    std::ios::sync_with_stdio(false);

    int t, n, k;

    cin >> t;
    while(t--) {
        cin >> n >> k;

        cout << getnum(n, k) << endl;
    }

    return 0;
}