http://codeforces.com/group/NVaJtLaLjS/contest/238202/problem/D
题意
农夫的牛爱喝柠檬水,每次听到牛铃都会赶来。当一只牛前面不多于w[i]只牛时,它才愿意排队,否则就会离开。
现在已知N只牛的w[i]值,牛赶来的时间是随机的。问最短的队伍是多长。
示例:
Input:
5 7 1 400 2 2
Output:
3
原题下面的提示很隐晦,这里给出更直白的提示:
那些容忍度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 ## 全部牛都愿意排队