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;
    }
  • 相关阅读:
    六、函数篇
    七、浅拷贝和深拷贝
    五、模块导入方法及常用模块
    四、注释与捕获参数
    三、python对字符串和集合的内存垃圾回收机制
    二、数据类型的常用方法
    一、基本数据类型
    工作必备之正则匹配、grep、sed、awk
    如何检查linux服务器是否被入侵
    linux查看磁盘类型(是否SSD盘)
  • 原文地址:https://www.cnblogs.com/pk28/p/6136650.html
Copyright © 2011-2022 走看看