Thông tin
Sau đây là lời giải của đề thi thử Kỳ thi Chọn HSG tỉnh Bà Rịa - Vũng Tàu K9 lần II (được chuẩn bị theo ma trận kiến thức của Sở GD&ĐT tỉnh Bà Rịa - Vũng Tàu)
Thời gian: 20:00 - 22:30 ngày 02/03/2025
Bạn đọc có thể nộp và chấm bài TẠI ĐÂY
Chuẩn bị bởi team Logica, thuộc khuôn khổ dự án The Algitect (ALGI Project)
Lưu ý: Lời giải này chỉ hướng đến việc AC (tức là đạt trọn điểm) các bài.
Có con rồng lần lượt bay đến tấn công lâu đài của Trâm.
Yêu cầu: Đếm số lượng con rồng đã bị Trâm kẹp đuôi hoặc cắt vuốt.
Dữ liệu bảo đảm:
Subtasks:
Bài toán đơn giản là đếm số lượng số từ đến chia hết cho hoặc .
Lưu ý
Những số chia hết cho cả và chỉ được xem là số.
Tip
Ta có công thức sau:
Với là số lượng bội của từ đến .
Như vậy, ta có thể tính được số lượng bội của và là:
Tuy nhiên, với phép tính trên, những số vừa chia hết cho vừa chia hết cho đang bị đếm lặp lại lần và cần trừ đi.
Nhận xét
Số nhỏ nhất vừa chia hết cho và vừa chia hết cho là bội chung nhỏ nhất của và
Vì vậy, bội của bội chung nhỏ nhất của và là những số chúng ta cần trừ đi
Ta tính được bội chung nhỏ nhất của và bằng:
Kết quả bài toán là:
Độ phức tạp thời gian: .
Độ phức tạp trên là độ phức tạp để tính bằng thuật toán Euclid.
Cho truy vấn, mỗi truy vấn gồm một số nguyên .
Yêu cầu: In ra các ước nguyên tố của theo thứ tự giảm dần.
Dữ liệu bảo đảm: và .
Subtasks:
Thực chất, bài toán yêu cầu phân tích thừa số nguyên tố của .
Định nghĩa là ước nguyên tố nhỏ nhất của .
VD: .
Giả sử đã tính được với từ đến , có thể tìm được tất cả các ước số nguyên tố của bằng cách không ngừng chia cho đến khi .
VD: Phân tích thừa số nguyên tố của
có các ước nguyên tố là và .
Tip
Tạm gọi việc thực hiện tính trước mảng là sàng ước nguyên tố. Đúng như tên gọi của nó, phương pháp này áp dụng tư tưởng của thuật toán sàng nguyên tố.
Cụ thể, ta duyệt tăng dần từ , nếu chưa tìm được ước nguyên tố , ta duyệt qua tất cả các bội của và đánh dấu .
Vì với mỗi số, ta duyệt qua các bội của nó, do đó thuật toán trên có độ phức tạp:
Với là giá trị lớn nhất cần sàng tới.
Tuy nhiên, trong thực tế, thuật toán trên chạy nhanh hơn rất nhiều vì ta chỉ duyệt qua bội của những số nguyên tố.
Độ phức tạp thời gian: .
Khoa có món đồ, món đồ thứ có khối lượng là . Cậu cần xếp các món đồ vào thùng có sức chứa tối đa là .
Yêu cầu: Đếm số cách để Khoa chọn hai món đồ bỏ vào thùng.
Dữ liệu bảo đảm: và .
Subtasks:
Thực chất, bài toán yêu cầu đếm số cặp thỏa .
Xét trường hợp ta cố định , khi đó cần đếm số lượng thỏa:
Điều này có thể thực hiện bằng tìm kiếm nhị phân cơ bản.
Caution
Có thể, khoảng thỏa mãn chứa cả mà ta đang cố định. Khi đó, cần trừ ra.
Độ phức tạp thời gian: .
Tí có một chiếc hộp ma thuật và được đưa cho một hằng số . Có truy vấn, mỗi truy vấn thuộc một trong hai dạng:
+ x
: Thêm một viên ngọc có sức mạnh vào hộp.- x
: Lấy ra một viên ngọc có sức mạnh (đảm bảo có ít nhất một viên trong hộp).Yêu cầu: Với mỗi truy vấn, tính số cách lấy một số viên ngọc trong hộp để tổng sức mạnh bằng . In ra số cách chia dư cho
Dữ liệu bảo đảm: và .
Subtasks:
Với mỗi truy vấn, đếm số cách chọn một tập con trong tập hợp các số để tổng bằng .
Đây là một bài toán quy hoạch động cái túi (balo) điển hình.
Với những cách tạo ra tổng ban đầu, có thể thêm giá trị để tạo tổng .
Với những cách tạo ra tổng ban đầu, nay mất đi một giá trị để tạo tổng .
Lưu ý:
- x
cần phải duyệt giảm dần để đảm bảo đang lưu trạng thái của truy vấn trước chứ không phải truy vấn hiện tại.+ x
cần phải duyệt tăng dần để lưu trạng thái khi đã xét thêm giá trị .Độ phức tạp thời gian: .