1 条题解

  • 0
    @ 2026-4-23 23:35:13

    要解决这个问题,我们需计算学生们根据比赛得分获得的糖果总数。具体来说,如果学生 ii 的得分高于学生 jj,那么学生 ii 将获得 aiaja_i - a_j 颗糖果。我们需要计算所有学生获得的糖果总和。

    核心思路

    使用前缀和数组来快速计算排序后数组中前 kk 个元素的和。这样,对于排序后的每个元素 aia_i,其贡献的糖果数可以通过 ai×isumia_i \times i - \text{sum}_i 计算,其中 sumi\text{sum}_i 是前 ii 个元素的和。

    ::::success[AC代码]

    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    int n, ans, a[10000005], sum[10000005];
    signed main() {
    	cin >> n;
    	for (int i = 0; i < n; i++) {
    		cin >> a[i];
    	}
    	sort(a, a + n);
    	for (int i = 0; i < n; i++) {
    		sum[i + 1] = sum[i] + a[i];
    	}
    	for (int i = 0; i < n; i++) {
    		ans += a[i] * i - sum[i];
    	}
    	cout << ans << '\n';
    	return 0;
    }
    

    ::::

    • 1

    信息

    ID
    9646
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者