zoukankan      html  css  js  c++  java
  • HihoCoder

    题面在这里!

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

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

        后面的就相当于把每一种数值的贡献加起来,也可以在排完序之后的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
    ",ans);
    	return 0;
    }
    

      

  • 相关阅读:
    7.Mongodb安全性流程
    6.Mongodb索引
    5.Mongodb聚合
    8-进程管理
    7-安装包管理
    6-文件系统
    5-权限用户组
    27-ATM+购物车程序
    26.本章小结
    名词解释
  • 原文地址:https://www.cnblogs.com/JYYHH/p/9414630.html
Copyright © 2011-2022 走看看