E - 一支獨木

n個人,已知每個人體重。獨木舟承重固定,每隻獨木舟最多坐兩個人,可以坐一個人或者兩個人。顯然要求總重量不超過獨木舟承重,假設每個人體重也不超過獨木舟承重,問最少需要幾隻獨木舟? 

Input

第一行包含兩個正整數n (0 接下來n行,每行一個正整數,表示每個人的體重。體重不超過1000000000,並且每個人的體重不超過m。

Output

一行一個整數表示最少需要的獨木舟數。

Sample Input

3 6
1
2
3

Sample Output

2

小白看到這樣的題沒仔細讀,上去就寫,寫完就交,wa了兩次,發現有個條件沒有讀到,真是有點遺憾,題中有要求每艘船隻能最多裝兩個人,那麼可以對所有人的體重sort一次,接下來再進行一一配對;注意條件聲明;話不多說,直接上代碼:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define ll long long
ll r[100050];
int main(){
    ll a,b,c,i,j,k;
    memset(r,0,sizeof(r));
    scanf("%lld%lld",&a,&b);
    c=0;
    for(i=0;i<a;i++){
        scanf("%lld",&r[i]);
    }
    sort(r,r+a);//體重重排;
    j=b;
    i=0;k=a-1;
    while(i<=k){
        if(j>=r[k]){
            j-=r[k];
            k--;
            if(j>r[i]){
                j-=r[i];
                i++;
                c++;
                j=b;//判斷能否裝一個胖子一個瘦子
            }
            else{
                c++;
                j=b;//不能的話就進行下一組組合;
            }
        }
    }
    printf("%lld\n",c);
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章