Hướng dẫn giải của Thi thử HSG9 2026 - Ngày 3 - Xâu ký tự
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.
Tác giả:
Nhận xét: Bài toán yêu cầu thực hiện ~q~ truy vấn độc lập. Mỗi truy vấn yêu cầu trích xuất một đoạn con từ vị trí ~l~ đến ~r~ của xâu ~s~, tìm tất cả các số tự nhiên xuất hiện trong đoạn đó, tính tổng của chúng, và cuối cùng tìm số nguyên tố nhỏ nhất lớn hơn hoặc bằng tổng vừa tính được.
Ý tưởng: Hướng giải quyết cơ bản nhất là xử lý tuần tự từng truy vấn. Bắt đầu bằng việc duyệt qua từng ký tự của đoạn con cần xử lý. Cần lưu ý rằng chỉ số của xâu trong C++ bắt đầu từ ~0~, do đó vòng lặp sẽ chạy từ vị trí ~l-1~ đến ~r-1~.
Khởi tạo một biến tạm để lưu giá trị số đang ghép và một biến để lưu tổng. Khi duyệt qua một ký tự, nếu đó là chữ số, hãy nhân giá trị của biến tạm với ~10~ và cộng thêm giá trị của chữ số đó. Ngược lại, nếu gặp chữ cái, điều đó có nghĩa là việc ghép một số vừa kết thúc; lúc này, hãy cộng biến tạm vào tổng và đặt lại biến tạm về ~0~. Sau khi quét hết đoạn con, đừng quên cộng thêm giá trị còn lại của biến tạm (nếu có) vào tổng. Cuối cùng, sử dụng một vòng lặp while kết hợp với hàm kiểm tra tính nguyên tố để tăng dần tổng lên cho đến khi đạt được số nguyên tố thỏa mãn điều kiện.
Độ phức tạp: Việc duyệt qua đoạn con tiêu tốn thời gian tỉ lệ thuận với độ dài đoạn, tức là ~\mathcal{O}(r - l)~. Kết hợp với thời gian kiểm tra số nguyên tố, tổng thời gian thực thi cho ~q~ truy vấn rơi vào khoảng ~\mathcal{O}(q \times |s|)~. Phương pháp này phù hợp để giành điểm ở các subtask có ~q=1~ hoặc có độ dài xâu nhỏ.
Bình luận