第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(沈阳)
思路:
从大到小排序,把前k个数加起来
#include <bits/stdc++.h> using namespace std; const int N = 1010; int a[N]; int main() { int n, k; cin >> n >> k; for(int i = 0; i < n; i ++ ) cin >> a[i]; sort(a, a + n, greater<int>()); long long sum = 0; for(int i = 0; i < k; i ++ ) sum += a[i]; cout << sum << endl; return 0; }
思路:
记录一下原数组和排好序后的数组,并记录其前缀和,每次前缀和相等的时候就答案数加一
#include <bits/stdc++.h> using namespace std; const int N = 1000010; int a[N], b[N]; int main() { int n; cin >> n; for(int i = 0; i < n; i ++ ) cin >> a[i], b[i] = a[i]; sort(a, a + n); long long suma = 0, sumb = 0, res = 0; for(int i = 0; i < n; i ++ ) { suma += a[i]; sumb += b[i]; if(suma == sumb) res ++ ; } cout << res << endl; return 0; }

浙公网安备 33010602011771号