CSU1775-悲催的移寝-贪心

U: 悲催的移寝

Description

对于csuxushu来说,能够在CSU(California State University)上学是他一生的荣幸,而换校区搬寝室则是他最大的不幸。顺利通过省赛选拔,开心的csuxushu现在需要着手准备搬家事宜。
对于好学的csuxushu来说,唯一头疼的就是书籍的搬运了,因为他的书实在是太多了。为了防止书籍在运输过程中受损,他打算定制特制的储物保护箱。为了简单起见,我们假设他所有的书都是一样规格。由于是批量定制,这些储物箱都有相同的长度L,宽度和厚度都是一本书的宽度和厚度。csuxushu有一个特殊的要求,那就是每个储物箱最多只能放两本书。当然,他需要运走所有的N本书,并且每一个储物箱里书的总长度不能超过L。
尽管校队队员给了csuxushu许多奖励,csuxushu还是想定尽可能少的储物箱,以求节约经费,然而面对这么困难的问题他显然是一脸懵逼,这时候他想到了你——全CSU最厉害的程序员来帮助他解决这个问题。

Input

第一行一个整数T,代表有T组数据,之后一个空行并且接下来每两组数据之间有一个空行。
每组数据第一行,为1个整数n (1 ≤ n ≤ 10^5),代表有n本书。第二行,为1个整数L ,1≤l ≤ 10000 ,为特制储物箱长度。接下来n行,分别为每本书的长度li,li≤l。

Output

每组数据输出一行,即csuxushu至少需要定多少储物箱。相邻两组数据之间输出一个空行以示区分。

Sample Input

1

10
80
70
15
30
35
10
80
20
35
10
30

Sample Output

6

Hint

img

最高的肯定就是和最矮的配着,只要想到这一点剩下的就是怎么写程序了

#include <bits/stdc++.h>
#define N 101000
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int len[N];
//bool used[N];
int main()
{
    ios::sync_with_stdio(false);
    int t,n,cnt,l;
    cin>>t;
    while(t--){
        cnt=0;
        cin>>n>>l;
        for(int i=0;i<n;++i){
            cin>>len[i];
//          used[i]=false;
        }
        sort(len,len+n);
        int head=0,tail=n-1;
//      for(int i=0;i<n;++i){
//          cout<<len[i]<<' ';
//      }
        while(head<=tail){
//          cout<<head<<' '<<tail<<endl;
            if(len[head]+len[tail]<=l){
                ++head;
            }--tail;
            ++cnt;
        }
        cout<<cnt<<endl;
        if(t){
            cout<<endl;
        }
    }
    return 0;
}

/**********************************************************************
    Problem: 1775
    User: CSUzick
    Language: C++
    Result: AC
    Time:124 ms
    Memory:2084 kb
**********************************************************************/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值