[ 题解 ] [ 贪心 ] D. Lemonade Line (待更名)

http://codeforces.com/group/NVaJtLaLjS/contest/238202/problem/D


题意

农夫的牛爱喝柠檬水,每次听到牛铃都会赶来。当一只牛前面不多于w[i]只牛时,它才愿意排队,否则就会离开。

现在已知N只牛的w[i]值,牛赶来的时间是随机的。问最短的队伍是多长。


示例:

Input

5
7 1 400 2 2 

Output

原题下面的提示很隐晦,这里给出更直白的提示:

那些容忍度w[i]低又晚来的牛就会离开队伍。


似乎想到了什么对吧。


总是假设容忍度高的牛先来排队挤位,那么当队伍到达一定长度后,容忍度低的牛全都不愿再排队了。


所以,这题只要把数据w[]从大到小排序,逐个扫描即可得到答案。


注意!有时候比如5只牛容忍度都大于5就扫描不出答案,最终则必须输出5,不然会因为没有输出Wrong Answer


代码如下:

 1 ## 输入N和w[i]
 2 N = gets.to_i ;
 3 cows = Array.new( gets.split.map(&:to_i) ) ;
 4 
 5 ## 数组排序,倒置
 6 cows.sort! ;
 7 cows.reverse! ;
 8 
 9 for i in 0...N
10     ## 从这只牛开始,后面的牛都不愿排队
11     if cows[i] < i then
12         puts i ;
13         exit ;
14     end
15 end
16 puts N ;
17 ## 全部牛都愿意排队

猜你喜欢

转载自www.cnblogs.com/Kaidora/p/10527305.html