Processing math: 100%
Solutions of Division problem - MarisaOJ: Marisa Online Judge

Solutions of Division problem

Select solution language

Write solution here.


User Avatar NHQ0914    Created at    4 likes

Nhận xét đầu tiên: để abacbc>0 thì bộ ba số này phải thỏa điều kiện a>b>c. (1) Chỉ riêng với nhận xét này, bạn đã có thể giảm thời gian chạy code trâu xuống 6 lần. Gọi f(x) là tổng xy với mọi yA1yx. - Ta nhận thấy xf(x) tỷ lệ thuận với nhau. - Ngoài ra, khi xét đến x, ta thấy rằng chỉ có các giá trị y là ước của x mới làm tăng f(x) lên 1. (2) Từ đây, ta có một ý tưởng là cố định ab trước, khi này ta sẽ ngay lập tức có được ab, việc còn lại là tính tổng của các acbc thôi. Khi đã cố định a, ta duyệt qua các giá trị b sao cho b<a đồng thời b[1...a). Như đã nói ở trên, ý tưởng chính của thuật toán là khi duyệt đến b, ta phải tính được tổng acbc. Để làm được việc này, ta có thể dựa vào nhận xét (2): chỉ cần duyệt qua các giá trị c là ước của b, bước này tốn O(số ước của b). Để liệt kê được các ước của b, ta có thể dựa vào sàng nguyên tố để có được sàng ước và chuẩn bị trước với độ phức tạp O(nlogn) Độ phức tạp thời gian: ~O(n2t+nlogn) (t là hằng số biểu diễn cho bước duyệt qua các c làm f(b) thay đổi, t ~ 8) *Note: mình thấy trong phần all submissions cũng có nhiều người dùng prefix sum, nhưng vì quá gà nên mình không hiểu được ToT.