问题 C: PIPI捡垃圾

问题 C: PIPI捡垃圾

题目描述

PIPI参加志愿者活动去沙滩上捡垃圾,已知沙滩上有 N 堆垃圾,每个垃圾的重量为 L,PIPI的垃圾袋容量为 M,一个垃圾袋最多能装两个垃圾(大与小相配)。问: PIPI最少需要多少个垃圾袋才能把垃圾全带走?

输入

第一行包含一个正整数T代表测试样例组数。
对于每组测试用例,第一行包含两个正整数 N和 M(N<=105,M<=109)。
第二行包含 N 个正整数代表每一个垃圾的重量。

输出

对于每组样例,输出包含一个正整数代表最少需要的垃圾袋数目。除了最后一组样例,每两组样例间有一个空行。

样例输入 

1
3 2
1 2 2

样例输出 

#include<stdio.h>
void quick_sort(int num[], int low, int high )//快排
{
    int i,j,temp;
    int tmp;

    i = low;
    j = high;
    tmp = num[low];   //任命为中间分界线,左边比他小,右边比他大,通常第一个元素是基准数

    if(i > j)  //如果下标i大于下标j,函数结束运行
    {
        return;
    }

    while(i != j)
    {
        while(num[j] >= tmp && j > i)   
        {
            j--;
        }

        while(num[i] <= tmp && j > i)
        {
            i++;
        }

        if(j > i)
        {
            temp = num[j];
            num[j] = num[i];
            num[i] = temp;
        }
    }

    num[low] = num[i];
    num[i] = tmp;

    quick_sort(num,low,i-1);
    quick_sort(num,i+1,high);
}
int main()
{
	int t=0;
	scanf("%d",&t);
	for(int i=0;i<t;i++)
	{
		int n=0,m=0;
		scanf("%d%d",&n,&m);
		int cnt=0;
		int l[100005]={0};
		for(int j=0;j<n;j++)
		{
			scanf("%d",&l[j]);
		}
		//printf("%d\n",cnt);
		quick_sort(l,0,n-1);
		int p=0,q=n-1;
		while(p<=q)	
		{
			if(p==q)	//只剩下1个。
			{
				cnt++;
				break;
			}
			if(l[p]+l[q]<=m)
			{
				cnt++;
				p++;
				q--;
			}
			else
			{
				cnt++;
				q--;
			}
		} 
		if(i==0)
			printf("%d\n",cnt); 
		else
			printf("\n%d\n",cnt); 

	}
	return 0;
}
3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值