Gửi bài giải

Điểm: 5,00
Giới hạn thời gian: 2.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C++

Có N quân Domino xếp thành một hàng như hình vẽ:


Mỗi quân Domino được chia làm hai phần, phần trên và phần dưới. Trên mặt mỗi phần có từ 1 đến 6 dấu chấm.Ta nhận thấy rằng: Tổng số dấu chấm ở phần trên của N quân Domino bằng: 6+1+1+1=9, tổng số dấu chấm ở phần dưới của N quân Domino bằng 1+5+3+2=11, độ chênh lệch giữa tổng trên và tổng dưới bằng |9-11|=2.
Với mỗi quân, bạn có thể quay 180 độ để phần trên trở thành phần dưới, phần dưới trở thành phần trên, và khi đó độ chênh lệch có thể được thay đổi. Ví dụ như ta quay quân Domino cuối cùng của
hình trên thì độ chênh lệch bằng 0.

Bài toán đặt ra là: Đếm xem có bao nhiêu cách xoay để tổng số chấm phần trên lớn hơn phần dưới đúng bằng K dấu .

Input:

- Dòng đầu chứa hai số nguyên dương N (1≤N≤20) và K (1=K<=100).

- N dòng sau, mỗi dòng hai số ai, bi là số dấu chấm ở phần trên, số dấu chấm ở phần dưới của quân Domino thứ i (1≤ ai, bi ≤6).

Output: Một số duy nhất là đáp án thỏa mãn yêu cầu bài. 

 

 


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    vito120400  đã bình luận lúc 6, Tháng 1, 2024, 7:27

    code của bài này nha mn

    include <iostream>

    include <vector>

    int countWaysToRotate(const std::vector<std::pair>& dominos, int n, int k, int idx, int diff) { if (idx == n) { // Kiểm tra nếu độ chênh lệch bằng k return (diff == k) ? 1 : 0; }

    // Cố gắng xoay quân Domino idx
    int rotatedWays = countWaysToRotate(dominos, n, k, idx + 1, diff + dominos[idx].first - dominos[idx].second);
    
    // Không xoay quân Domino idx
    rotatedWays += countWaysToRotate(dominos, n, k, idx + 1, diff + dominos[idx].second - dominos[idx].first);
    
    return rotatedWays;
    

    }

    int main() { int n, k; std::cin >> n >> k;

    std::vector&lt;std::pair<int, int>> dominos(n);
    for (int i = 0; i < n; ++i) {
        std::cin >> dominos[i].first >> dominos[i].second;
    }
    
    int result = countWaysToRotate(dominos, n, k, 0, 0);
    
    std::cout << result << std::endl;
    
    return 0;
    

    }