问题标题: 酷町堂:2606

0
0
已解决
徐云皓
徐云皓
新手天翼
新手天翼

2606   抠门的农场主

题目描述 Description

农场主养了N头牛,这些牛喜欢喝咖啡,于是农场主有时会提供咖啡给牛们。牛需要先排好队,排完队然后才开始取咖啡。但如果前方队伍太长,超过牛的忍受范围,有的牛就会选择不排队。请你计算所有牛到达所有顺序的情况下,最少的排队的牛的数量。

输入描述 Input Description

第一行,一个整数N,N(1 ≤ N ≤ 10^5 )表示牛的个数
接下来N行,每行一个整数,W,W(0 ≤ W ≤ 10^9)表示这头牛能容忍的队伍最长长度,如果队伍比这要长,则它会拒绝排队领咖啡

输出描述 Output Description

输出在所有可能的牛到达顺序之下,最小可能的排队的牛数量。

样例输入 Sample Input

 

5
7
1
400
2
2

样例输出 Sample Output

 

3


0
已采纳
徐熙晨
徐熙晨
新手光能
新手光能

排序规则如下

bool cmp(int a,int b)
{
    return a>b;
} 

核心代码如下

sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
    if(i-1<=a[i]) 
        s++;
    else 
        break;

 

0
王睿卿
王睿卿
高级守护
高级守护

先从大到小排个序,然后判断输出。求采纳。

0
李彬
李彬
初级守护
初级守护

这道题目So easy,关键看你能否看出来。

思路很简单:将n个数从大到小排序。因为要使得排队的牛最少,不难发现应该将忍耐程度最大的牛排在最前面。

排序之后的核心代码:

for(int i=1;i<=n;i++){
        if(i-1<=a[i])sum++;
    }

 

0
我要回答