Phép chia nguyên

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1800 (p) Thời gian: 1.0s Bộ nhớ: 1G Input: DIV.inp Output: DIV.out

Để giúp các bạn trong lớp ôn lại kiến thức về phép chia lấy dư, thầy giáo của Alice đưa ra một bài toán như sau:

Cho một dãy số nguyên \(a_1, a_2, \dots, a_n\), với \(a_i \neq 0\). Với mỗi cặp \((i, j)\) (\(1 \le i, j \le n\)), tính giá trị \(\lfloor \frac{a_i}{a_j} \rfloor\), với \(\lfloor x \rfloor\) là số nguyên lớn nhất không vượt quá \(x\).

Tất nhiên, trong thời gian của tiết học, thầy giáo chỉ có thể đưa ra một dãy số với độ dài nhỏ để kiểm tra kiến thức các bạn. Alice muốn thử thách bản thân với những dãy số dài hơn. Để kiểm tra xem mình có tính đúng hay không, Alice muốn bạn tính tổng các giá trị \(\lfloor \frac{a_i}{a_j} \rfloor\) giúp Alice nhé.

Input

  • Dòng đầu tiên gồm một số nguyên dương \(n\) (\(1 \le n \le 2 \cdot 10^5\)).
  • Dòng tiếp theo gồm \(n\) số nguyên \(a_1, a_2, \dots, a_n\) (\(0 < |a_i| \le 3 \cdot 10^5\)).

Output

  • Một dòng duy nhất là tổng các giá trị \(\lfloor \frac{a_i}{a_j} \rfloor\) tìm được.

Ràng buộc bổ sung

  • 20% số điểm có \(n \le 2000\)\(a_i > 0\).
  • 20% số điểm khác có \(n \le 2000\).
  • 20% số điểm khác có \(0 < a_i \le 2000\).
  • 20% số điểm khác có \(|a_i| < 2000\).
  • 10% số điểm khác có \(a_i > 0\).
  • 10% số điểm còn lại không có giới hạn gì thêm.

Example

Test 1

Input
4
1 2 3 4
Output
17
Note

Dưới đây là bảng các giá trị \(\lfloor \frac{a_i}{a_j} \rfloor\):

\(1\) \(2\) \(3\) \(4\)
\(1\) \(1\) \(2\) \(3\) \(4\)
\(2\) \(0\) \(1\) \(1\) \(2\)
\(3\) \(0\) \(0\) \(1\) \(1\)
\(4\) \(0\) \(0\) \(0\) \(1\)

Tổng cần tìm là: \(1 + 2 + 3 + 4 + 1 + 1 + 2 + 1 + 1 + 1 = 17\).

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.