比赛 NOIP2007普及组(复现) 评测结果 C
题目名称 纪念品分组 最终得分 0
用户昵称 HB 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2020-02-09 18:55:09
显示代码纯文本
#include<bits/stdc++.h>
int main(void){
	freopen("group.in","r",stdin);
	freopen("group.out","w",stdout);
	int w=0,n=0,date=0,a=0,b=0,num=0,time=0;
	int ch[30005]={0},ps[201]={0};
	scanf("%d%d",&w,&n);
	for(int i=0;i<n;++i)
	{
		scanf("%d",&ch[i]);
		ps[ch[i]]+=1;
	}
	for(int j=5;j<201;++j)
	{
		while(ps[j]>0)
		{
			ch[a++]=j;
			ps[j]--;
		}
	}
	a=0;
	b=n-1;
	for(int i=0;i<b;)
	{
		time=i;
		a=ch[b]+ch[i];
		if (a==w)
		{
			num+=1;
			b--;
			++i;
			if(b==i)
			{
				num+=1;
			}
		}
		else if(a>w)
		{
			num+=1;
			b--;
		}
		while(a<w&&time<b)
		{
			if(a+ch[++time]<w)
			{
				a+=ch[time];
				if (time==b)
				{
					num+=1;
					i=time;
					break;
				}
			}
			else
			{
				b--;
				i=time;
				num+=1;
				if(b==i)
			{
				num+=1;
			}
				break;
			}
		}
	}
	printf("%d",num);
}