對於csuxushu來說,能夠在CSU(California State University)上學是他一生的榮幸,而換校區搬寢室則是他最大的不幸。順利通過省賽選拔,開心的csuxushu現在需要着手準備搬家事宜。
對於好學的csuxushu來說,唯一頭疼的就是書籍的搬運了,因爲他的書實在是太多了。爲了防止書籍在運輸過程中受損,他打算定製特製的儲物保護箱。爲了簡單起見,我們假設他所有的書都是一樣規格。由於是批量定製,這些儲物箱都有相同的長度L,寬度和厚度都是一本書的寬度和厚度。csuxushu有一個特殊的要求,那就是每個儲物箱最多隻能放兩本書。當然,他需要運走所有的N本書,並且每一個儲物箱裏書的總長度不能超過L。
儘管校隊隊員給了csuxushu許多獎勵,csuxushu還是想定儘可能少的儲物箱,以求節約經費,然而面對這麼困難的問題他顯然是一臉懵逼,這時候他想到了你——全CSU最厲害的程序員來幫助他解決這個問題。
第一行一個整數T,代表有T組數據,之後一個空行並且接下來每兩組數據之間有一個空行。
每組數據第一行,爲1個整數n (1 ≤ n ≤ 10^5),代表有n本書。第二行,爲1個整數L ,1≤l ≤ 10000 ,爲特製儲物箱長度。接下來n行,分別爲每本書的長度li,li≤l。
每組數據輸出一行,即csuxushu至少需要定多少儲物箱。相鄰兩組數據之間輸出一個空行以示區分。
Sample Input1 10 80 70 15 30 35 10 80 20 35 10 30Sample Output
6Hint
解題思路:
貪心,就是每一個箱子裏面儘量裝更多的書,最大的和最小的搭配,如果裝下了最大的書,但是沒有辦法一起裝下最小的書,那倒數第二小的書也不行,思路就是這樣,但是要注意輸出,由空行的
代碼:
#include<iostream>
#include<algorithm>
using namespace std;
int list[100000];
int main()
{
int t, n, l;
int low, high;
int sum;
cin >> t;
for (int ii = 0; ii < t;ii++)
{
cin >> n >> l;
for (int i = 0; i < n; i++)cin >> list[i];
sort(list, list + n);
low = 0;
high = n - 1;
sum = 0;
while (low < high)
{
if (list[low] + list[high] <= l)low++;
high--;
sum++;
}
if (low == high)sum++;
cout << sum << endl<<endl;
}
return 0;
}