1026. 【GDOI2005】积木分发 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Detailed Limits Goto ProblemSet Description 歌手The Pancakes到幼儿园跟小朋友玩,她到达的时候小朋友已经争着积木玩了。小朋友都想要更多的积木砌一个自己喜欢的图形,砌玩就可以和The Pancakes合照。同时,The Pancakes手上还有一些积木,她可以把手里的这些积木全部给一个小朋友,然后等该小朋友砌完后就可以收回所发的积木和该小朋友原先手里的积木。但她不知道能否让所有的小朋友都和她合照,聪明的你可以帮助她吗? Input 输入包含多个数据。 每个数据的第一行是两个正整数n和s,1<=n<=10000,1<=s<=10000,表示一共有n位小朋友,The Pancakes手上有s块积木。以下有n行,每行有两个正整数,a和b,1<=a,b<=10^9,表示第i个小朋友手上有a块积木,还需要b块积木才能够砌完。 输入两个0时表示结束。 Output 如果可以让所有小朋友都和Pancake合照,就输出YES;否则,输出NO。 Sample Input 2 2 1 4 2 1 2 2 1 4 1 1 0 0 Sample Output YES NO Data Constraint var a,b,c:longint; v,r:array[0..10000]of qword; p:boolean; ans:qword; procedure ss(l,u:longint); var i,j:longint; mid:qword; begin i:=l; j:=u; mid:=r[(i+j) div 2]; while i<j do begin while r[i]<mid do inc(i); while r[j]>mid do dec(j); if i<=j then begin v[0]:=v[i]; v[i]:=v[j]; v[j]:=v[0]; r[0]:=r[i]; r[i]:=r[j]; r[j]:=r[0]; inc(i); dec(j); end; end; if j>l then ss(l,j); if i<u then ss(i,u); end; begin while not eof do begin readln(a,b); if (a=0)and(b=0) then exit; for c:=1 to a do begin readln(v[c],r[c]); end; ss(1,a); ans:=b; p:=true; for c:=1 to a do begin if ans>=r[c] then ans:=ans+v[c] else p:=false; end; if p=true then writeln('YES') else writeln('NO'); end; end.