1 条题解
-
0
自动搬运
来自洛谷,原作者为

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
- 上传者