一二三四五 上山打老虎

NC16640-纪念品分组

题目链接:https://ac.nowcoder.com/acm/problem/16640
题意:给定一个数值m和n个数,把n个数分组,要求每组最多包括两个数,每组和小于m,求最少分组数。
思路:贪心+双指针,注意l和r边界判断

#include<iostream>
#include<algorithm>
using namespace std;
int a[(int)3e4+5];
int main (){
    int n,m;
    cin>>m>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    sort(a,a+n,greater<int>());
    int l=0,r=n-1;
    for(;l<n-1;l++){
        if(l<r&&a[l]+a[r]<=m)r--;
        if(l>=r)break;
    }
    cout<<l+1;
    return 0;
}
posted @ 2021-01-19 22:32  黒川川  阅读(82)  评论(0)    收藏  举报