记录编号 7159 评测结果 AAAAAAAAAA
题目名称 [NOIP 2007]纪念品分组 最终得分 100
用户昵称 GravatarBYVoid 是否通过 通过
代码语言 C++ 运行时间 0.144 s
提交时间 2008-11-06 21:17:46 内存使用 0.49 MiB
显示代码纯文本
#include <iostream>

using namespace std;

const int INF=0x7FFFFFFF;

template <typename T,int MAX,int OV> class tHeap
{
	public:
		T heap[MAX];
		int Size;
		tHeap()
		{
			Size=0;
			heap[0]=OV;
		}
		void ins(T p)
		{
			int k=++Size,f;
			f=k/2;
			while (heap[f] > p )
			{
				heap[k]=heap[f];
				k=f;
				f=k/2;
			}
			heap[k]=p;
		}
		T del()
		{
			T v=heap[1];
			int k=1,child;
			child=k*2;
			while (child<=Size)
			{
				if (child+1<=Size && heap[child+1]<heap[child])
					child++;
				if (heap[child] < heap[Size])
				{
					heap[k]=heap[child];
					k=child;
					child=k*2;
				}
				else
					break;
			}
			heap[k]=heap[Size--];
			return v;
		}
};

tHeap<int,30001,-INF> H;
int S[30001];

void group()
{
	int i,j,N,W,a,Ans=0;
	freopen("group.in","r",stdin);
	freopen("group.out","w",stdout);
	scanf("%d%d",&W,&N);
	for (i=1;i<=N;i++)
	{
		scanf("%d",&a);
		H.ins(a);
	}
	for (i=1;i<=N;i++)
	{
		S[i]=H.del();
	}
	for (i=1,j=N;i<=j;)
	{
		if (S[i]+S[j]<=W && i!=j)
		{
			i++;j--;
			Ans++;
		}
		else
		{
			j--;
			Ans++;
		}
	}
	cout << Ans;
}

int main()
{
	group();
	return 0;
}