1 条题解

  • 0
    @ 2025-8-24 21:59:32

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar btc001
    已退役,但偶尔闪现

    搬运于2025-08-24 21:59:32,当前版本为作者最后更新于2019-07-27 19:51:24,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这道题真的很水

    不是我骄傲,而是我的代码是真的一句废话都没有

    因为题目说要求尽可能少,所以我们就推出了一个简单的贪心思想,言归正传,言简意赅:

    首先,把数组用sort函数排个序(如果连sort都不知道,就不要做普及组的题了)。

    然后,再从后往前看,如果目前人(牛)数比这头牛的底线数量还多,就跳出这个循环。否则就把目前人(牛)数++。下面是思路,已经懂了的人可以跳过。

    思路

    为什么要从后往前呢?因为我们要保证牛的数量尽可能少,后面的牛底限会比前面

    的大,如果把它放在了前面,那么牛的数量会变多,那些更不愿意排队的牛就会离
    去。在第一头牛离去之后,我们就可以不管后面的了,因为我们是倒着看的,所以

    后面的牛更懒得排队,前面的牛都走了,后面的还留着干嘛?

    以下是标程:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main(){
    
    	int n;
    
    	cin >> n;
    
    	int a[n+1], sum=0;
    
    	for(int i=1; i<=n; i++) cin >> a[i];
    
    	sort(a+1, a+n+1);
    
    	for(int i=n; i>=1; i--){
    
    		if(a[i]>=sum)
    	
        		sum++;
    	
        	else break;
    
    	}
    
    	cout<<sum<<endl;
    
    	return 0;
    
    }
    

    点个赞再走吧!

    • 1

    信息

    ID
    3351
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者