A. Do you want a date?
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Leha decided to move to a quiet town Vičkopolis, because he was tired by living in Bankopolis. Upon arrival he immediately began to expand his network of hacked computers. During the week Leha managed to get access to n computers throughout the town. Incidentally all the computers, which were hacked by Leha, lie on the same straight line, due to the reason that there is the only one straight street in Vičkopolis.

Let's denote the coordinate system on this street. Besides let's number all the hacked computers with integers from 1 to n. So the i-th hacked computer is located at the point xi. Moreover the coordinates of all computers are distinct.

Leha is determined to have a little rest after a hard week. Therefore he is going to invite his friend Noora to a restaurant. However the girl agrees to go on a date with the only one condition: Leha have to solve a simple task.

Leha should calculate a sum of F(a) for all a, where a is a non-empty subset of the set, that consists of all hacked computers. Formally, let's denote A the set of all integers from 1 to n. Noora asks the hacker to find value of the expression . Here F(a) is calculated as the maximum among the distances between all pairs of computers from the set a. Formally, . Since the required sum can be quite large Noora asks to find it modulo 109 + 7.

Though, Leha is too tired. Consequently he is not able to solve this task. Help the hacker to attend a date.

Input

The first line contains one integer n (1 ≤ n ≤ 3·105) denoting the number of hacked computers.

The second line contains n integers x1, x2, ..., xn (1 ≤ xi ≤ 109) denoting the coordinates of hacked computers. It is guaranteed that allxi are distinct.

Output

Print a single integer — the required sum modulo 109 + 7.

Examples
input
24 7

output
3

input
34 3 1

output
9

Note

There are three non-empty subsets in the first sample test: and . The first and the second subset increase the sum by 0and the third subset increases the sum by 7 - 4 = 3. In total the answer is 0 + 0 + 3 = 3.

There are seven non-empty subsets in the second sample test. Among them only the following subsets increase the answer: . In total the sum is (4 - 3) + (4 - 1) + (3 - 1) + (4 - 1) = 9.

题意:给一个长度为n的数组(数组元素没有重复,可以看成一个集合),求这个集合的子集中最大值和最小值的差,然后求和。

我们知道n个元素的集合的子集为2^n个,把数组从小到大排序后,任意的第i个元素和第j个元素(i<j)可以算出关系为2^(j-i-1)*(a[j]-a[i]),然后根据这个式子可以写出代码。

代码:

for(i=1;i<=n;i++){for(j=i+1;j<=n;j++){ans+=b[j-i-1]*(a[j]-a[i])%mod;ans%=mod;}}//数组b为2^(n-1)

然而这个算法的时间复杂度为O(n^2),很明显地会超时,不符合题目要求。

然后对a[i]这个元素进行观察和推算,可以推出差值为(2^(i-1)-2^(n-i))*a[i]。

AC代码:

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 3e5 + 5;
typedef long long LL;
LL a[maxn], b[maxn];
#define mod 1000000007
int main()
{int n;while (cin >> n){int i;b[0] = 1;for (i = 1; i <= n; i++){cin >> a[i];b[i] = (2 * b[i - 1]) % mod;}sort(a + 1, a + 1 + n);LL ans = 0;for (i = 1; i <= n; i++)ans = (ans + (b[i - 1] - b[n - i])*a[i]) % mod;cout << ans << endl;}return 0;
}

转载于:https://www.cnblogs.com/orion7/p/6917395.html

Codeforces 809A - Do you want a date?(数学+排序)相关推荐

  1. codeforces 264 B. Good Sequences(dp+数学的一点思想)

    题目链接:http://codeforces.com/problemset/problem/264/B 题意:给出一个严格递增的一串数字,求最长的相邻两个数的gcd不为1的序列长度 其实这题可以考虑一 ...

  2. CodeForces - 1646E Power Board (思维,数学)

    题目链接:点击这里 题目大意: 给定一个 n×mn\times mn×m 的矩阵,其中 a[i][j]=ija[i][j]=i^ja[i][j]=ij ,求这个 n×mn\times mn×m 的矩阵 ...

  3. 枚举 ---- B. RPG Protagonist[Educational Codeforces Round 94 (Rated for Div. 2)]数学枚举

    B. RPG Protagonist 题目大意:就是你有两个人,每个人都有一个最大的体力值p和f,这两个人要去搬运剑和盾牌,剑的数量是cnts,盾的数量是cntw,每个剑的重量是是s,每个盾的重量是w ...

  4. Codeforces Educational 38 C. Constructing Tests ( 数学公式推导+暴力)

    C. Constructing Tests time limit per test 1 second memory limit per test 256 megabytes input standar ...

  5. 【CodeForces - 1152C 】Neko does Maths(数学数论,lcm,gcd性质)

    题干: 给出a,b<=1e9,你要找到最小的k使得lcm(a+k,b+k)尽可能小,如果有多个k给出同样的最小公倍数,输出最小的一个k. 解题报告: 因为题目中k太多了,先化简一下公式,假设a& ...

  6. 【CodeForces - 1062C】Banh-mi (贪心,数学,找规律,快速幂)

    题干: JATC loves Banh-mi (a Vietnamese food). His affection for Banh-mi is so much that he always has ...

  7. 【CodeForces - 1027C】Minimum Value Rectangle (数学,公式化简,思维,卡常卡memset)

    题干: You have nn sticks of the given lengths. Your task is to choose exactly four of them in such a w ...

  8. Codeforces Round #549(div2) D.The Beatles(数学)

    题意 给一个圆,圆上共有nk​nk​nk​个点,分别编号为0​0​0​~nk−1​nk-1​nk−1​,任意两个相邻的点距离1km​1km​1km​,其中在编号为kt+1​kt+1​kt+1​的点上有 ...

  9. CodeForces - 1084A The Fair Nut and Elevator 数学

    题目 The Fair Nut lives in n story house. ai people live on the i-th floor of the house. Every person ...

最新文章

  1. Spring boot的put请求
  2. appium怎么操作物理返回键_这些Appium常用元素定位技巧,你掌握了几种?
  3. linux安装golang!!
  4. 的一致性哈希_五分钟看懂一致性哈希算法
  5. LAMP、LNMP实战之九搭建cms、blog、bbs(持续更新)
  6. android防止左向右滑出程序,Android向右滑动关闭Activity(高仿知乎微信)
  7. 深入了解帆软报表系统的启动过程三
  8. 使用 windows命令和iconv.exe批量转换文件编码
  9. 几个常用JAVA开源项目的地址荟萃
  10. HIL自动驾驶仿真:VTD分布式显示配置详解
  11. 如何把图片裁剪为圆形
  12. scp远程传输文件之权限被拒绝解决方案
  13. python学了没有用_如何用Python进行无监督学习
  14. CLCL-多重剪切板
  15. 丛麟环保IPO过会:年利润超2亿 拟募资20.3亿
  16. ChatGPT 以及相关开源项目体验
  17. CiteSpace学习笔记
  18. Realsense深度相机+pyqt5+应用案例(基础篇2)
  19. 周末被叫去加班,就像。。。
  20. 支付宝现如今是付款刚需!今天我用Django开发一款支付宝出来!

热门文章

  1. 无法访问android.git.kernel.org的情况下如何使用repo
  2. ADS下C语言中局部变量的存储位置分配
  3. 【转载】yolo数据增强和评价方法
  4. BZOJ1036: [ZJOI2008]树的统计Count
  5. 【Java_多线程并发编程】基础篇—线程状态及实现多线程的两种方式
  6. Localization
  7. elasticsearch 复杂查询小记
  8. centos7 mysql安装
  9. 使用Spring2.5的Autowired实现注释型的IOC(转载)
  10. 我的第一个ASP类(显示止一篇下一篇文章)