(题解一有空再补
题意很简单,有一个集合,两个人分别进行两种操作
1)对一个集合求和,加到score里面
2)把一个集合分裂成两个非空集合,或者去掉一个单集
每次把处理完的集合丢给对方,从1)开始
看题意的可以点叉叉了
题解:
水题。每次会切掉最小的那个数,然后单独的数被记最后一次,其他的数求和累加,然后进入下一轮。
所以sort一下,从小到大,从2到n+1,对应乘一下就好了,注意最大的数只会计n+1次。
想自己敲代码的可以点叉叉了。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>
#include <map>
#include <set>
using namespace std;
typedef long long ll;
ll a[300010];
int main()
{
//freopen("input","r",stdin);
//freopen("output","w",stdout);
int n;
cin>>n;
for (int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
ll ans=a[n-1]*n;
for (int i=0;i<n-1;i++)
ans+=(a[i]*(i+2));
cout<<ans<<endl;
return 0;
}