1 条题解
-
0
好短……
思路
首先,求这个式子很容易,但是最关键的是题目要求的是,这咋整?
首先假设我们要求,定义一个初始值为,这很简单,然后对于每一个,假设一共有个数比它大,那么就减去,最后输出即可。
为啥了?
现在有两个数,(),若在的左边,那么因为提前有加过一个,所以我们直接减去一个即可,如果在的右边,那因为我们提前加过一个,但是,所以我们需要把的贡献也减掉,也就是把减去,因此不管怎样,我们都需要。
AC代码
#include<bits/stdc++.h> #define int long long using namespace std; const int N=4e5+10; int n,a[N]; signed main() { scanf("%lld",&n); for(int i=1;i<=n;i++)scanf("%lld",&a[i]); int ans=0; for(int i=1;i<=n;i++)ans+=a[i]*(i-1); sort(a+1,a+n+1); for(int i=1;i<=n;i++)ans-=a[i]*(n-i); printf("%lld\n",ans); return 0; }
- 1
信息
- ID
- 7766
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 9
- 标签
- 递交数
- 7
- 已通过
- 6
- 上传者