jzoj P1026【GDOI2005】积木分发
2017-04-02 10:38
183 查看
题目大意:
歌手The Pancakes有s块积木,每一个小朋友有a块积木,还要b块才能砌好图形。如果她的积木能帮n个小朋友全部砌完图形,就可以与所有小朋友合影,并且她可以把积木给一个小朋友,然后等该小朋友砌完
4000
后就可以收回所发的积木和该小朋友原先手里的积木。能跟所有小朋友合影就输出YES,不然输出NO。
(1<=s,n<=10000),(1<=a,b<=10^9)
题解:
排序+模拟+贪心:
1.对于每一个b我们可以很容易发现贪心策略,每一次找需要积木最少的给予,就可以保证最优解,所以以b为关键字排序。
2.模拟做过去,如果当前The Pancakes的积木可以帮助需要积木数第k小的小朋友砌完即>b[k]就累加a[k],不然如果第k小都做不了,第k+1小自然做不了就退出。
3.如果能一直做到结束就代表可以帮助全部砌完,输出YES,不然输出NO。
时间复杂度:O(N)
歌手The Pancakes有s块积木,每一个小朋友有a块积木,还要b块才能砌好图形。如果她的积木能帮n个小朋友全部砌完图形,就可以与所有小朋友合影,并且她可以把积木给一个小朋友,然后等该小朋友砌完
4000
后就可以收回所发的积木和该小朋友原先手里的积木。能跟所有小朋友合影就输出YES,不然输出NO。
(1<=s,n<=10000),(1<=a,b<=10^9)
题解:
排序+模拟+贪心:
1.对于每一个b我们可以很容易发现贪心策略,每一次找需要积木最少的给予,就可以保证最优解,所以以b为关键字排序。
2.模拟做过去,如果当前The Pancakes的积木可以帮助需要积木数第k小的小朋友砌完即>b[k]就累加a[k],不然如果第k小都做不了,第k+1小自然做不了就退出。
3.如果能一直做到结束就代表可以帮助全部砌完,输出YES,不然输出NO。
时间复杂度:O(N)
var a,b:array [0..10001] of longint; i,n:longint; m:int64; procedure qsort(l,r:longint); var i,j,mid:longint; begin if l>=r then exit; i:=l; j:=r; mid:=b[(l+r) div 2]; repeat while b[i]<mid do inc(i); while b[j]>mid do dec(j); if i<=j then begin a[0]:=a[i];a[i]:=a[j];a[j]:=a[0]; b[0]:=b[i];b[i]:=b[j];b[j]:=b[0]; inc(i); dec(j); end; until i>j; qsort(i,r); qsort(l,j); end; begin readln(n,m); while (n<>0) or (m<>0) do begin for i:=1 to n do readln(a[i],b[i]); qsort(1,n); i:=0; while (m>=b[i+1]) and (i<n) do begin inc(i); m:=m+a[i]; end; if i=n then writeln('YES') else writeln('NO'); readln(n,m); end; end.
相关文章推荐
- JZOJsenior1026.【GDOI2005】积木分发
- 1134. 积木分发(贪心算法,先满足需求最小的)
- Sicily 1134 积木分发
- Sicily 1134. 积木分发
- 1134. 积木分发
- 积木分发
- <OJ_Sicily>1134积木分发
- VC2005的程序文件分发问题及解决
- 积木分发
- sicily 1134 积木分发
- GDOI2005 河床 题解
- Sicily 1134. 积木分发
- [SQL Server] 2005做发布服务器, 2008用做分发服务器时: 找不到存储过程'sp_MSrepcheck_qv’
- sicily 1134.积木分发
- 1134. 积木分发
- sicily 1134 积木分发
- Sicily 1134.积木分发
- JZOJsenior1028.【GDOI2005】飞越原野
- [ACM]积木分发
- Sicily 1134 积木分发