题目
n 个人,已知每个人体重wi 。独木舟承重固定,每只独木舟最多坐两个人,即可以坐一个人或者两个人。显然要求每只独木舟承载的总重量不能超过独木舟的承重 m 。假设每个人体重也不超过 m ,问最少需要几只独木舟?
(其中 0<n≤1e4,0<wi≤2e9,且wi≤1e9 )
input
第一行包含两个正整数n,m ,表示人数和独木舟的承重。
接下来 n 行,每行一个正整数wi ,表示每个人的体重。
Output
一行一个整数表示最少需要的独木舟数。
Sample 1
Input | Output |
3 6 1 2 3 | 2 |
Status
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
int main(){
ll n,m,ans[10001];
cin>>n>>m;
for(ll i=0;i<n;i++) //i从0开始[0,n)
cin>>ans[i];
sort(ans,ans+n);
ll sum=0,k=0,l=n-1;
while(k<1){
if(ans[k]+ans[l]<=m){
sum++;k++;l--;
}
else{
sum++;l--;
}
}
if(k==l) sum++; //当l==k跳出,但是还剩下一个人
cout<<sum<<endl;
}