zoukankan      html  css  js  c++  java
  • J

    小A和小B玩游戏,初始的时候小A给小B一组包含n个数的数组。他们按如下的规则进行:

    每次小B得到一组数,他把这组数的和加到自己的分数里面(他的初始分数是0),然后他把这组数还给小A。

    如果小A得到的这组数中只包含一个数,他就把这组数丢掉;否则,他就把这两组数分成两个不相交且不为空的两组数传回给小B

    上述操作不断执行,直到小A把他所有的数组全都丢弃为止。小B得到的最大分数是多少?    

    第一行包含一个数n(1<=n<=3*10^5)。第二行包含n个数a1,a2...an(1<=ai<=10^6),表示初始的时候小A给小B的数组。

    输出一个最大可能的分数并换行。  

    3

    3 1 5

    1

    10

    26

    10

    一开始读题,分成‘两个不想交的且不为空的数组‘  不相交是什么意思??    一开始我理解的是两个数组集合中不能有相同元素 比如{1},{1,2}就是不合法的....但出题人毛事不是这意思..

    这题贪心 即可。

    #include <bits/stdc++.h>
    #define ull unsigned long long
    #define ll long long
    #define mod 90001
    #define INF 0x3f3f3f3f
    #define maxn 300010
    #define cle(a) memset(a,0,sizeof(a))
    const ull inf = 1LL << 61;
    const double eps=1e-5;
    using namespace std;
    ll a[maxn];
    int main()
    {
        freopen("in.txt","r",stdin);
        int n;
        while(cin>>n){
            for(int i=1;i<=n;i++)cin>>a[i];
            if(n==1){
                cout<<a[1]<<endl;continue;
            }
            sort(a+1,a+1+n);
            ll ans=0;
            for(int i=1;i<=n;i++){
                ans+=(i+1)*a[i];
            }
            ans-=a[n];
            cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    OpenGL纹理映射总结
    研究生常用网站:
    Oracle 11g,10g数据库软件下载地址
    <转>乔布斯羡慕嫉妒恨的人:Android之父安迪·鲁宾
    VC6里面的中文名字或者注释复制乱码解决
    基于CentOs的Hadoop集群全分布式部署<转>
    centos架设FTP服务器
    centos 卸载 jdk
    ESX的 企业版许可证
    vsftpd的 553 Could not create file
  • 原文地址:https://www.cnblogs.com/pk28/p/6136650.html
Copyright © 2011-2022 走看看