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 gồm 3 subtask Subtask 1 : Subtask 2 : Subtask 3 : Không có giới hạn gì thêm
Lời giải bài 3 :
Subtask 1 : Trâu bò cày ruộng Subtask 2 : Cố định miền và đếm số lượng miền thỏa mãn Subtask 3 : Tối ưu từ Subtask 2
Gọi là số lượng các cặp thỏa mãn :
Từ đây ta tính được đáp số của bài toán là . Giờ việc của ta là tính hàm nhanh.
Cũng như Subtask 2, ta cố định miền lại, nhưng ta lại thấy rằng miền lúc này thật sự không nhỏ và việc duyệt đi nhiều lần chắc chắn sẽ dẫn tới TLE.
Đầu tiên, với một giá trị , ta thấy giá trị (bỏ qua điều kiện thỏa mãn trong đoạn ) sẽ là (chia làm tròn xuống)
Xét (), nếu (chia làm tròn xuống) thì số lượng miền thỏa mãn của và sẽ bằng nhau.
Để chứng minh thì với mỗi miền , nó sẽ đóng góp vào đáp án một lượng bằng giao điểm của với . Mà khi có cùng với thì ta dễ thấy chúng có cùng lượng đóng góp vào đáp án. Giả sử , thì với đều cũng sẽ có cùng lượng đóng góp.
Vậy giờ bài toán của ta với mỗi miền thuộc cùng, ta chỉ cần tính của một giá trị của vùng đó và nhân cho số lượng giá trị cùng vùng.
Nhưng bây giờ làm sao để ước tính số lượng vùng ? Có một tính chất quan trọng là trong dãy số (các phép chia đều làm tròn xuống) chỉ có nhiều nhất giá trị phân biệt.
Bời vì những giá trị chỉ giảm xuống khi nó gặp ước số của , cùng với đó không thể nào có số ước nhiều hơn được nên ta sẽ đảm bảo được thời gian chạy.
Vậy chi phí để tính một hàm lúc này là Phần phát sinh để ta tìm những đoạn cùng