Thông tin
Sau đây là lời giải của Kỳ thi Chọn HSG9 tỉnh Bà Rịa - Vũng Tàu năm học 2024 - 2025.
Thời gian thi: 08:00 - 10:30 ngày 04/03/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)
Đếm số lượng số chính phương nhỏ hơn hoặc bằng có tổng các chữ số là một số Fibonacci.
Dữ liệu đảm bảo: .
Subtasks:
Duyệt từ đến , kiểm tra và tăng kết quả nếu:
Kiểm tra số chính phương
Vì số chính phương là bình phương của một số nguyên, ta có thể kiểm tra một số có phải số chính phương hay không bằng cách lấy bình phương phần nguyên của so sánh với .
Tức là kiểm tra biểu thức sau có thỏa mãn hay không:
Kiểm tra số Fibonacci
Xây dựng mảng với là số Fibonacci thứ . Sau đó dùng mảng đánh dấu hoặc cấu trúc dữ liệu map để đánh dấu lại các số Fibonacci đã tìm được ở trên.
Nhận xét: Tổng chữ số của luôn nhỏ hơn hoặc bằng (số có tổng chữ số lớn nhất là ).
Mà . Do đó, ta chỉ cần quan tâm đến số Fibonacci đầu tiên
Độ phức tạp thời gian: .
Kế thừa tư tưởng thuật toán của thuật toán trước, ta cần một số cải tiến.
Nhận xét
Vì những số đẹp phải là số chính phương nên ta có thể tối ưu công đoạn duyệt tìm các số thỏa mãn bằng cách chỉ duyệt qua các số chính phương bé hơn hoặc bằng .
Để chỉ duyệt qua các số chính phương có dạng và bé hơn hoặc bằng , ta có:
Như vậy, ta duyệt qua mọi từ đến , ta tính được là một số chính phương. Lúc này ta chỉ cần kiểm tra điều kiện còn lại.
Độ phức tạp thời gian:
Thầy Minh có chiếc bút và quyển tập. Với một số lượng học sinh nhất định, thầy muốn phát hết số bút và quyển tập này, đồng thời số bút và số tập cũng phải được chia đều cho tất cả các bạn.
Yêu cầu: Tìm tất cả các cách phát quà thỏa mãn điều kiện của thầy Minh.
Cho hai số nguyên và , đếm số lượng số nguyên dương thỏa:
Nhận xét
Các số nguyên thỏa mãn yêu cầu đề bài bắt buộc phải bé hơn hoặc bằng và .
Duyệt từ đến và đếm tất cả các số thỏa mãn yêu cầu đề bài.
Độ phức tạp thời gian: .
Nhận xét
Xét bất kỳ, nếu và , dễ thấy
Bài toán trở thành: Đếm số lượng ước của .
Vì , có thể duyệt qua tất cả các ước của trong .
Độ phức tạp thời gian: .
Tìm bằng thuật toán Euclid mất thời gian .
Cho mảng số nguyên . Tìm đoạn con với sao cho lớn nhất.
Dữ liệu đảm bảo: và .
Subtask:
Duyệt và để thử qua mọi đoạn con. Tương ứng với mỗi đoạn , duyệt từ đến để tính tổng của đoạn.
Độ phức tạp thời gian: .
Kế thừa tư tưởng của subtask trước, ta có thể tối ưu công đoạn tính tổng của một đoạn bất kỳ bằng cách sử dụng mảng cộng dồn (prefix sum).
Tip
Gọi là tổng của phần tử đầu tiên của mảng , tức:
Do đó, ta có tổng của một đoạn là:
Độ phức tạp thời gian: .
Vì mọi số trong mảng đều không âm, dễ thấy đoạn con có tổng lớn nhất là toàn bộ mảng, tức đoạn .
Như vậy, đáp án của bài toán là .
Độ phức tạp thời gian: .
Tip
Bài toán tìm đoạn con liên tiếp có tổng lớn nhất là một ứng dụng điển hình của thuật toán quy hoạch động Kadane.
Độ phức tạp thời gian: .
Vườn hoa của nhà Minh có khóm hoa, khóm hoa thứ có bông hoa. Minh cần tìm cách cắt một số khóm hoa để tổng số bông hoa có được là nhiều nhất mà không được cắt khóm hoa liên tiếp.
Yêu cầu: Hãy xác định số lượng bông hoa nhiều nhất có thể cắt được.
Subtask:
Cho mảng số nguyên , tìm dãy con có tổng lớn nhất thỏa mãn không có phần tử nào liên tiếp nhau trong mảng.
Với , có thể xác định rõ ràng các trạng thái để thực hiện quy hoạch động.
Độ phức tạp thời gian: .
Cần tổng quát hóa tư tưởng quy hoạch động.
Hướng dẫn áp dụng công thức
Điều kiện này tương đương với .
Như vậy, công thức cuối cùng của ta với từ đến và là:
Độ phức tạp thời gian: .
Kế thừa tư tưởng từ subtask trước, nhưng biến đổi để tối ưu hơn.
Biến đổi công thức
Biến đổi công thức quy hoạch động từ subtask trước, ta có:
Như vậy, để tính , ta cần tính với .
Điều này dễ dàng được thực thi với kỹ thuật deque tìm max trên đoạn tịnh tiến.
Lưu ý
Một lựa chọn thay thế cho kỹ thuật trên là sử dụng cấu trúc dữ liệu set / multiset.