比赛 20120309 评测结果 C
题目名称 积木分发 最终得分 0
用户昵称 Launcher 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-03-09 20:29:18
显示代码纯文本
#include<fstream>
#include<memory>
using namespace std;
ifstream fin("toybrick.in");
ofstream fout("toybrick.out");
int a[10002][5]={0};
int f[10002]={0};
void sort(int l,int r)
{
	int i,j,k;
	int  x,y;
	i=l;
	j=r;
	x=a[(l+r)/2][3];
	do 
	{
	    while (a[i][3]<x) i++;
		while (a[j][3]>x) j--;
		if (i<=j)
		{
			y=a[i][3];
			a[i][3]=a[j][3];
			a[j][3]=y;
			
			k=a[i][1];
			a[i][1]=a[j][1];
			a[j][1]=k;
			
			k=a[i][2];
			a[i][2]=a[j][2];
			a[j][2]=k;
			i++;
			j--;
		}
	}
	while (i<=j);
	if (l<j) sort(l,j);
	if (i<r) sort(i,r);
}
int main()
{
	int i,j,k,open=0;
	int n,s,x,y;
	k=0;
	while (open==0)
	{
		fin>>n>>s;
		k++;
		open=1;
		if (n!=0) open=0;
		j=0;
		memset(a,0,sizeof(0));
		for (i=1;i<=n;i++)
		{
			fin>>a[i][1]>>a[i][3];
			a[i][2]=a[i][3]+a[i][1];
			if (a[i][3]==0) j++;
		}
		
		//fout<<j<<endl;
		
		sort(1,n);
		n-=j;
		for (i=1;i<=j;i++)
			s+=a[i][1];
		for (i=1;i<=n;i++)
		{
			a[i][1]=a[i+j][1];
			a[i][2]=a[i+j][2];
			a[i][3]=a[i+j][3];
		}
		for (i=1;i<=n;i++)
		{
		// 	fout<<a[i][1]<<a[i][2]<<a[i][3]<<endl;
			if (s>=a[i][3])
				s+=a[i][1];
			else
			{
				f[k]=1;
			}
		}
	}
	for (i=1;i<k;i++)
	{
		if (f[i]==1) 
			fout<<"NO"<<endl;
		else
			fout<<"YES"<<endl;
	}
	
	fout.close();
	return 0;
}