Bedao Mini Contest 23 - Truy vấn ngẫu nhiên

View as PDF

Submit solution


Points: 0.35 (partial)
Time limit: 1.0s
Memory limit: 256M
Input: stdin
Output: stdout

Author:
Problem type
Allowed languages
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Cho một dãy ~N~ số nguyên dương. Chọn ngẫu nhiên hai chỉ số ~1 \le l, r \le n~. Nếu ~l > r~ thì ta swap hai chỉ số. Trọng số của một đoạn ~[l, r]~ là số giá trị khác nhau trong dãy ~a_l, a_{l + 1}, \ldots, a_r~. Tính Giá trị kì vọng của trọng số nhận được.

Chi tiết về Giá trị kì vọng có thể tìm hiểu ở đây. Ở bài toán này, Giá trị kì vọng có thể hiểu là trung bình cộng của các trọng số nhận được từ tất cả các cách chọn hai chỉ số ~l, r~.

Input

  • Dòng đầu tiên gồm số nguyên dương ~N~ ~(1 \le N \le 10^6)~.

  • Dòng thứ hai gồn ~N~ số nguyên dương ~a_1, a_2, \ldots, a_n~ ~(1 \le a_i \le 10^6)~.

Output

  • Gồm một số nguyên là Giá trị kì vọng của trọng số được viết dưới dạng phân số ~\frac{X}{Y}~ chia lấy dư cho ~10^9 + 7~.

Scoring

Subtask Điểm Giới hạn
1 ~20~ ~N \le 100~
2 ~30~ ~N \le 1000~
3 ~50~ ~N \le 1000000~

Sample Input 1

4
4 2 3 2

Sample Output 1

2

Sample Input 2

7
1 2 8 6 2 8 6

Sample Output 2

918367356

Notes

Ở test ví dụ thứ nhất trên:

  • Có ~4~ cặp ~(l, r)~ tương ứng với các đoạn có trọng số bằng ~1~ là (~1, 1~), (~2, 2~), (~3, 3~), (~4, 4~).

  • Có ~8~ cặp ~(l, r)~ tương ứng với các đoạn có trọng số bằng ~2~ là (~1, 2~), (~2, 1~), (~2, 3~), (~3, 2~), (~2, 4~), (~4, 2~), (~3, 4~), (~4, 3~).

  • Có ~4~ cặp ~(l, r)~ tương ứng với các đoạn có trọng số bằng ~3~ là (~1, 3~), (~3, 1~), (~1, 4~), (~4, 1~).

Từ đó, giá trị kì vọng nhận được là ~\frac{1 \cdot 4 + 2 \cdot 8 + 3 \cdot 4}{16} = 2~.

Ở test ví dụ thứ hai, giá trị kì vọng nhận được là ~\frac{129}{49} \equiv 918367356 \pmod{10^9 + 7}~.


Comments

Please read the guidelines before commenting.


There are no comments at the moment.