1 条题解
-
1
贡献法 解法
#include<iostream> #include<algorithm> using namespace std; const int N=100010; int n; int a[N]; long long ans; int main() { cin >> n; for(int i = 1;i <= n; ++ i) cin >> a[i]; sort(a + 1, a + n + 1);//小的在前面 - 贪心 for(int i = 1; i <= n; ++ i) { ans += (a[i]) * (n - i);//第 i 个人打水时间会被后面 n - i 个人等待 //累加每个人对答案的贡献 } cout << ans << '\n'; return 0; }
前缀和 解法
#include <iostream> #include <algorithm> using namespace std; typedef long long LL; const int N = 100010; LL a[N], s[N]; LL n, ans; int main() { cin >> n; for(int i = 1; i <= n; ++ i) cin >> a[i]; sort(a + 1, a + n + 1);//小的在前面 - 贪心 for(int i = 1; i <= n; ++ i) { s[i] = s[i - 1] + a[i]; ans += s[i - 1];//当前这个人等待了前面 i - 1 个人的时间 } cout << ans << '\n'; return 0; }
- 1
信息
- ID
- 5524
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 4
- 上传者