There is no commentSelect some text and then click Comment, or simply add a comment to this page from below to start a discussion.
Bài 1. Mật khẩu mạnh.
Tags: counting, two-pointers - 1100.
Ta sẽ sử dụng con trỏ đế tìm vị trí lớn nhất cho mỗi vị trí thỏa mãn là một mật khẩu mạnh. Khi đó, các xâu con bắt đầu từ đến đều sẽ là mật khẩu mạnh.
Lưu ý rằng độ dài của xâu con cũng có rằng buộc là không bé hơn và không lớn hơn .
Độ phức tạp của ý tưởng trên là về thời gian, về bộ nhớ.
Bài 2. Biến đổi đối xứng và nguyên tố.
Tags: counting, two-pointers - 1200.
Sus fact: Setter của bài ban đầu có ý định tăng .
Ta có nhận xét như sau:
Để dựng một số đối xứng, ta chỉ cần biết số lượng chữ số đầu tiên của nó.
Với , thay vì duyệt từ đến để lấy số đối xứng thì ta có thể duyệt từ đến với là số chữ số của , sau đó dựng số đối xứng vởi nửa đầu là . Gọi là số đối xứng sau khi dựng xong, ta chỉ việc kiểm tra có phải là số nguyên tố không và so sánh với để lấy kết quả.
Lưu ý trường hợp chẵn hoặc lẻ, nếu không cẩn thận sẽ dễ bị dính bug.
Độ phức tạp của ý tưởng trên là về thời gian, xấp xỉ về bộ nhớ.
Bài 3. Cặp số trước lúc rời xa …
Tags: number theory - 1600.
Gọi là số cặp mà với . Dễ dàng thấy đáp án của chúng ta sẽ là .
Ta đặt , sau đó đặt và . Khi đó, ta sẽ có:
.
Khi có được , ta còn có . Khi đó, ta sẽ có:
.
.
(vì ).
(nhớ rằng ).
Từ phép biển đổi trên, ta sẽ duyệt qua các ước của . Với mỗi ước , ta sẽ đếm số cặp thỏa mãn và . Để giải bài toán này, ta có thể làm như sau:
nên chắc chắn chỉ chứa các thừa số nguyên tố của . Thêm vào đó, nên sẽ không có thừa số nguyên tố chung.
Giả sử , ta sẽ thấy mỗi thừa số có thể xuất hiện trong hoặc .
Từ nhận xét trên, đáp án của bài toán con này là với là số lượng thừa số nguyên tố của .
Với cách giải trên, ta có thể tìm ra kết quả cho rất nhanh. Tuy nhiên ở đây, ta cần phải tìm và rõ ràng tính cho từng số từ đến là không đủ nhanh. Vì vậy, ta có thể làm như sau.
Sử dụng sàng thừa số nguyên tố nhỏ nhất, nghĩa là sẽ là thừa số nguyên tố nhỏ nhất của . Khi đó, ta có thể phân tích mọi số trong đoạn với độ phức tạp chỉ vỏn vẹn .
Gọi là số cặp thỏa mãn và . Với sàng ở trên, ta có thể dễ dàng tính trong , việc tính có thể tính trước đó.
Khi có , ta sẽ duyệt qua các bội của là và thêm vào .
Sau khi có được , ta sẽ sử dụng mảng tổng tiền tố để tính .
Sau khi tính trước như trên, ta chỉ việc in ra cho mỗi số nguyên dương trong .
Độ phức tạp của ý tưởng trên là với thời gian và với bộ nhớ, trong đó .
Bài 4. Số Ebic.
Tags: bin-search, math - 1500.
Lời giải bên dưới là một cách giải đúng và rất nhanh, tuy nhiên nó lại rất chi là overskill. Bài này có thể giải hoàn toàn bằng toán, và mình lại ngu nó
Gọi là số lượng số Ebic loại không lớn hơn , đáp án cần tìm của ta khi đó sẽ là số nguyên dương nhỏ nhất thỏa mãn . Để làm điều này, ta sẽ sử dụng Chặt nhị phân.
Để tính , ta sẽ nhắc lại định nghĩa của số Ebic loại .
Số Ebic là một số nguyên dương thỏa mãn là bội của (điều kiện 1) hoặc có chữ số tận cùng chia hết cho (điều kiện 2).
Từ định nghĩa trên, ta có thể tính bằng cách lấy số lượng số thỏa mãn trong điều kiện và trừ cho số lượng số thỏa mãn cả điều kiện, theo tư tưởng của Bao hàm loại trừ. Điều kiện thì ta có thể dễ dàng tính được bằng công thức . Vậy phần còn lại ta sẽ làm như thế nào.
Ta sẽ gọi là số lượng số chia lấy dư cho là khi xét đến chữ số thứ của số hình mẫu. Ta sẽ dễ dàng có công thức truy hồi tổng quát như sau:
+= .
Bởi vì ta đang đếm số lượng số thỏa mãn điều kiện , ta sẽ chỉ dựng đến chữ số thứ của số hình mẫu với là số chữ số của . chữ số còn lại, ta sẽ điền một số có chữ số chia hết cho (tính cả số vô nghĩa). Giả sử ta sẽ thêm số vào cuối số hình mẫu, khi đó ta sẽ có:
số thỏa mãn điều kiện số Ebic khi thêm vào cuối nó .
số thỏa mãn điều kiện số Ebic khi thêm vào cuối nó , nhưng phải nhỏ hơn chữ số tận cùng của .
Ta nhận thấy rằng, số lượng số thỏa mãn điều kiện và cũng có thể tính từ kết quả của quá trình Digit Dp trên. Cụ thể là:
số thỏa mãn điều kiện và số Ebic khi thêm vào cuối nó với .
số thỏa mãn điều kiện số Ebic khi thêm vào cuối nó với , nhưng phải nhỏ hơn chữ số tận cùng của .
Gọi và lần lượt là số lượng số thỏa mãn điều kiện và điều kiện với . Khi đó, . Ngoài ra, bạn nên lưu ý trường hợp thêm là một số có chữ số vô nghĩa và số hình mẫu là .
Độ phức tạp của ý tưởng trên là về thời gian, về bộ nhớ, trong đó với và và khoảng bạn sử dụng Chặt nhị phân.
Bài 5. Mahiru và cuốn sổ tay …
Tags: dp and others - 2200.
Sus fact: Bài này lấy ý tưởng từ bài của đề thi Tin học trẻ Khu vực bảng B năm 2024
Dễ dàng thấy đây là một bài Digit Dp trá hình với tìm thứ tự tìm điển sau khi Dp. Lưu ý rằng ở bài này không phải là dấu hiệu của Bitmask Dp, mà thực chất chỉ là điều kiện để Digit Dp được.
Đầu tiên, ta sẽ gọi là các điều kiện có . Khi đó, sẽ chứa các cặp .
Ta sẽ gọi là số lượng dãy bit thỏa mãn khi ta đã dựng xong từ đoạn đến , trong đó tượng trưng cho đoạn bit từ đến . Nếu như vậy thì sẽ có tới tận dãy bit ta cần xét, rõ ràng là không khả thi. Ta sẽ tận dụng dữ liệu và chỉ xét tượng trưng cho đoạn bit từ đến . Khi đó, số lượng dãy bit cần xét giảm xuống còn .
Để kiểm tra đoạn này có hợp lệ hay không, ta sẽ duyệt qua các điều kiện từ và kiểm tra bit cuối của mask có phải là hay không. Nếu không, rõ ràng . Ngược lại, ta sẽ có công thức truy hồi sau:
Nếu thì .
Gọi là tiếp theo ở vị trí . Khi đó, . Lúc này, độ dài của có thể vượt quá nên ta sẽ loại bỏ bit đầu tiên của nó.
Nếu như bit cuối cùng của ta đặt là , ta sẽ có += .
Nếu như bit cuối cùng của ta đặt là , ta sẽ có += .
Để cài đặt dễ hơn, ta có thể sử dụng đệ quy có nhớ. Trong đó thì vẫn sẽ hoạt động như trên và ta sẽ gọi để tính nó.
Sau khi tính xong tất cả giá trị , ta sẽ bắt đầu trả lời truy vấn. Với mỗi số , ta sẽ đặt tượng trưng cho dãy bit cần tìm (lưu ý vẫn chỉ quan tâm tời bit cuối của nó) và duyệt từ đến rồi làm như sau:
Nếu thì bit thứ của đáp án chắc chắn là bit 1. Sau đó, ta sẽ thêm bit 1 vào cuối và trừ cho .
Nếu không thì bit thứ của đáp án chắc chắn là bit 0. Sau đó, ta sẽ thêm bit 0 vào cuối .
Nếu có độ dài hơn thì ta sẽ loại bỏ bit cuối của nó.
Sau khi làm như trên, ta sẽ in ra đáp nếu nếu như và -1 nếu không.
Độ phức tạp của ý tưởng trên là với thời gian và với bộ nhớ, trong đó .