【正经题解】group
2024-03-18 14:38:10
发布于:浙江
2阅读
0回复
0点赞
将纪念品的价格按升序排序。
使用两个指针,一个指向最左边,一个指向最右边。
循环遍历,每次选择两个指针所指向的纪念品,计算它们的价格之和。
如果价格之和超过 ,将右指针向左移动;如果不超过 ,将左指针向右移动,右指针向左移动,同时记录组数。
输出最终的组数。
#include<bits/stdc++.h>
using namespace std;
int arr[1000000];
int main() {
int w, n;
cin >> w >> n;
for(int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr, arr + n);
int left = 0, right = n - 1;
int ans = 0;
while(left <= right) {
if(arr[left] + arr[right] > w) {
ans++;
right--;
} else {
ans++;
left++;
right--;
}
}
cout << ans << endl;
return 0;
}
这里空空如也
有帮助,赞一个