Thông tin
Sau đây là lời giải của Kỳ thi Tuyển sinh 10 trường THPT chuyên Lê Quý Đôn tỉnh Bà Rịa - Vũng Tàu năm học 2024 - 2025.
Bạn đọc có thể nộp và chấm bài (test tự sinh) TẠI ĐÂY.
Chuẩn bị bởi team Logica, thuộc khuôn khổ dự án The Algitect (ALGI Project)
Cho số nguyên dương .
Yêu cầu: Hãy đếm số lượng các ước số dương của .
Dữ liệu đảm bảo: .
Ràng buộc:
Duyệt từ đến và đếm các số mà chia hết cho .
Tức là .
Độ phức tạp thời gian: .
Nhận xét
Giả sử có một ước là , cũng là một ước của .
Quan sát thấy, luôn luôn có ít nhất một trong hai số nhỏ hơn hoặc bằng
Do đó, ta duyệt từ đến , nếu tìm thấy số mà , ngoài đếm ước , ta đếm thêm cả ước của .
Lưu ý: Trong trường hợp , số có thể bị đếm lần.
Độ phức tạp thời gian: .
Cho một số nguyên dương có số lượng chữ số không vượt quá .
Yêu cầu: Hoán vị các chữ số của , sao cho sau khi hoán vị ta thu được một số nguyên dương lớn nhất là bội của số .
Ràng buộc:
Một số chia hết cho khi và chỉ khỉ số đó thỏa mãn:
Ta thử tất cả các cách hoán vị các chữ số của và tìm số lớn nhất thỏa mãn tất cả điều kiện ở trên.
Để dễ thao tác, ta sử dụng hàm next_permutation()
có sẵn trong thư viện STL của C++.
Độ phức tạp thời gian:
Ta sắp xếp lại các chữ số theo thứ tự giảm dần để số đạt giá trị lớn nhất.
Trùng hợp, khi đó số (nếu có) của cũng sẽ được dồn về cuối số, giúp ta thỏa mãn điều kiện thứ .
Khi ta sắp xếp lại như vậy, tổng các chữ số không bị thay đổi, nên ta kiểm tra xem tổng này có chia hết cho hay không.
Tip
Để dễ thao tác, ta nên sử dụng kiểu dữ liệu string
để lưu số .
Độ phức tạp thời gian: với là số lượng chữ số của .
Cho dãy gồm số nguyên dương. Bằng cách ghi dãy lặp lại vô hạn lần ta thu được dãy .
Yêu cầu: Cho số nguyên dương . Tính tổng phần tử liên tiếp trong dãy bắt đầu từ phần tử có chỉ số .
Dữ liệu đảm bảo:
Ràng buộc:
Thực hiện mô phỏng theo đề bài, ta duy trì một biến vị trí để di chuyển tăng dần, nếu vị trí lớn hơn , ta cập nhật lại biến về .
Mẹo
Sử dụng phép toán để cập nhật lại vị trí.
Độ phức tạp thời gian: .
Nhận xét
Dãy là dãy lặp đi lặp lại vô tận.
Do đó, tổng của phần tử liên tiếp mà đề bài yêu cầu ta tính cũng được tạo thành từ nhiều tổng của cả dãy cộng lại và một ít số bị lẻ ra.
Ta chỉ cần duyệt để tính các số bị lẻ ra, còn nhóm tổng của có thể tính nhanh.
Độ phức tạp thời gian: .
Cho dãy gồm các số nguyên được gọi là dãy lõm nếu tồn tại chỉ số sao cho .
Yêu cầu: Cho trước dãy gồm số nguyên dương . Hãy tìm dãy con lõm có độ dài lớn nhất.
Dữ liệu đảm bảo: và .
Ràng buộc:
Sinh tất cả dãy con của , kiểm tra tính hợp lệ, và lấy độ dài dãy con dài nhất.
Độ phức tạp thời gian: .
Nhận xét
Một dãy con lõm là hợp bởi một dãy con giảm và một dãy con tăng (mỗi dãy gồm ít nhất hai phần tử).
Áp dụng quy hoạch động cơ bản.
Khi đó, ở mỗi vị trí từ đến , nếu và thì có một dãy con lõm nhận làm điểm thấp nhất (điểm lõm) có độ dài là:
Độ phức tạp thời gian: .
Tư tưởng kế thừa từ subtask trước, tuy nhiên cần cải tính việc tính và .
Bạn đọc tham khảo bài viết về giải thuật dãy con tăng dài nhất nâng cao sau đây.
Độ phức tạp thời gian: .