题面在这里!

 

    拆成两个部分分别算显然比较简单。

    前面一个部分排个序枚举最大值算就好啦。

    后面的就相当于把每一种数值的贡献加起来,也可以在排完序之后的a[]上面直接算出来。

 

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5,ha=1e9+7;

inline int add(int x,int y){ x+=y; return x>=ha?x-ha:x;}
inline void ADD(int &x,int y){ x+=y; if(x>=ha) x-=ha;}

int n,a[N],ans,c[N];

inline void calc(){
	for(int i=1;i<=n;i++) ADD(ans,a[i]*(ll)c[i-1]%ha);
	for(int i=1,now=0;i<=n;i++){
        now++;
        if(a[i]!=a[i+1]) ADD(ans,add(ha-c[n],c[n-now])),now=0;
	}
}

int main(){
	scanf("%d",&n);
	c[0]=1; for(int i=1;i<=n;i++) c[i]=add(c[i-1],c[i-1]);
	
	for(int i=1;i<=n;i++) scanf("%d",a+i);
	sort(a+1,a+n+1);
	
	calc();
	
	printf("%d\n",ans);
	return 0;
}

  

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-15
  • 2021-11-28
  • 2021-07-31
  • 2021-09-04
  • 2021-09-30
猜你喜欢
  • 2021-04-28
  • 2022-12-23
  • 2021-06-08
  • 2022-01-02
  • 2020-07-17
  • 2022-01-03
  • 2021-12-04
相关资源
相似解决方案