Hướng dẫn giải của TS10 Tiền Giang 2023 - Cắt hình

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 làm lời giải.


Nộp code mẫu trước khi tự giải được bài tập là một hành vi có thể bị ban.

Dễ thấy ở mỗi lần cắt, cạnh của hình vuông lớn nhất có thể cắt được là chiều rộng của mảnh giấy. Số lượng hình vuông ở mỗi lần cắt là $\lfloor \frac{M}{N} \rfloor $ với $M, N$ lần lượt là chiều dài và chiều rộng của mảnh giấy ở lần cắt đang xét. Ta tiếp tục xét cho tới khi chiều dài hoặc chiều rộng của mảnh giấy bằng $0$, tức mảnh giấy không thể cắt được nữa.

Code tham khảo
void solve(){
    ans = 0;
    while (m > 0 && n > 0){
        if (m < n) swap(m, n);
        ans += m/n;
        m %= n;
    }
    cout << ans;
}

Độ phức tạp thuật toán: $\mathcal{O}(\log_2(m+n))$.


Bình luận

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


Không có bình luận tại thời điểm này.