编程题
### 问题描述 麻衣是蓝桥的一名数据科学家,她每天都要处理大量的数据。有一天,她发现了一个有趣的问题,对于小规模的数据这个问题非常容易解决,但随着数据点数量的增加,问题的复杂性也在增加。因此,麻衣需要你的帮助来解决这个问题。 给定一个集合 $S$,它包含 $N$ 个非负整数(集合中的某些整数可能会出现多次),你需要找出 $f(S)$ 的值。 这里 $f(S)$ 的定义如下: $$ f(S) = \sum\limits_{s \in subsets(S)} \max(s) - \min(s) $$ 其中 $subsets(S)$ 表示集合 $S$ 的所有子集,$\max(s)$ 和 $\min(s)$ 分别表示子集 $s$ 中的最大值和最小值。因为 $f(S)$ 的值可能非常大,所以请你输出 $f(S)$ 对 $10^9 + 7$ 取模后的结果。 注意,集合 $S$ 中可能包含重复的值。例如,对于集合 $S$ = { $1,2,2$ },我们认为第一个 $2$ 和第二个 $2$ 是不同的,所以会有两个不同的子集 { $1,2$ }。 ### 输入格式 第一行包含一个整数 $N$,表示集合 $S$ 的元素数量。第二行包含 $N$ 个用空格隔开的非负整数,表示集合 $S$ 的元素。 数据范围保证:$1 \leq N \leq 10^5$,$1 \leq S_i \leq 10^9$。 ### 输出格式 输出一个整数,表示对应的 $f(S)$ 对 $10^9 + 7$ 取模后的结果。 ### 样例输入 ```text 3 1 2 3 ``` ### 样例输出 ```text 6 ``` ### 说明 对于测试样例,可以找出的子集和对应的 $\max(s) - \min(s)$ 值如下: - 子集 { $1$ },$\max(s) - \min(s) = 0$。 - 子集 { $2$ },$\max(s) - \min(s) = 0$。 - 子集 { $3$ },$\max(s) - \min(s) = 0$。 - 子集 { $1,2$ },$\max(s) - \min(s) = 1$。 - 子集 { $2,3$ },$\max(s) - \min(s) = 1$。 - 子集 { $1,3$ },$\max(s) - \min(s) = 2$。 - 子集 { $1,2,3$ },$\max(s) - \min(s) = 2$。 所以 $f(S)$ 的值为 $0 + 0 + 0 + 1 + 1 + 2 + 2 = 6$。
查看答案
赣ICP备20007335号-2