比赛 |
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;
}