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;
    }
  • 相关阅读:
    Cocos2d-x 3.2:定时器的使用和原理探究(2)
    Cocos2d-x 3.2:定时器的使用和原理探究(1)
    c++初学(电梯实验加强版)
    中序线索化二叉树
    c++初学(电梯实验)
    二叉树表达式计算(2)
    输入计算表达式,将他们存在string【】中
    函数修改二维数组的值
    单件模式以及内存释放
    迷宫(栈)不能求最短路径
  • 原文地址:https://www.cnblogs.com/pk28/p/6136650.html
Copyright © 2011-2022 走看看