Hướng dẫn giải của Bedao Mini Contest 23 - Nhặt cờ


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Giả sử nếu còn ~m + 1~ lá cờ ở lượt của An thì chắc chắn An sẽ thua do với mọi nước đi của An thì Bình luôn lấy được lá cờ cuối cùng. Trường hợp trên luôn đúng với trường hợp số lá cờ còn lại bằng ~2 \cdot (m + 1)~, ~3 \cdot (m + 1)~, ~x \cdot(m + 1)~.

Tương tự, nếu tới lượt của An mà còn ~x \cdot (m + 1) + y~ lá cờ thì luôn tồn tại một cách lấy ~k~ lá (~1 \leq k \leq m~) để đưa Bình vào thế thua như trên.

Vì vậy, An sẽ thắng nếu như ~n\ MOD\ (m + 1) \neq 0~, nếu không thì người chiến thắng sẽ là Bình

Độ phức tạp mỗi test : ~O(1)~

#include <bits/stdc++.h>

using namespace std;

signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    int t; cin >> t;
    while(t--){
        long long n; int m;
        cin >> n >> m;

        if(n % (m + 1) == 0){
            cout << "B";
        } else{
            cout << "A";
        }

        if(t > 0) cout << "\n";
    }
    return 0;
}

Bình luận

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



  • 0
    AI  đã bình luận lúc 19, Tháng 4, 2024, 13:50

    nhưng có cách nào dễ hiểu hơn để chứng minh thuật toán trên là đúng không ?