NC24281. [USACO 2018 Ope S]Lemonade Line
描述
Farmer John想要提前准备一定量的柠檬汽水,但是他不想浪费。排队的奶牛的数量可能取决于她们到达的顺序。帮助他求出最少可能的排队的奶牛数量。
输入描述
第一行包含N,第二行包含N个用空格分隔的整数w1,w2,…,wN。输入保证1≤N≤100,000,此外对于每头奶牛i,0≤wi≤1000,000,000。
输出描述
输出在所有可能的奶牛到达顺序之下,最小可能的排队的奶牛数量。
示例1
输入:
5 7 1 400 2 2
输出:
3
说明:
在这个情况下,可能最后仅有三头奶牛在队伍中(这也是最小可能值)。假设w=7和w=400的奶牛先到并等在队伍中。然后w=1的奶牛到达并且会离开,这是由于已经有2头奶牛在队伍中了。然后w=2的两头奶牛到达,一头留下排队,一头离开。C++14(g++5.4) 解法, 执行用时: 7ms, 内存消耗: 504K, 提交时间: 2019-06-23 14:25:51
#include<bits/stdc++.h> using namespace std; bool cmp(int a,int b) { return a>b; } int main() { int n; long long w[100086]; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&w[i]); sort(w,w+n,cmp); int cnt=0; while(w[cnt]>=cnt) cnt++; cout<<cnt; }
C++11(clang++ 3.9) 解法, 执行用时: 12ms, 内存消耗: 720K, 提交时间: 2020-02-17 22:11:41
#include<bits/stdc++.h> using namespace std; int a[100001],n,i,num; int main() { cin>>n; for(i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); while(a[n]>=num) { n--; num++; } cout<<num; }
Python3(3.5.2) 解法, 执行用时: 43ms, 内存消耗: 4704K, 提交时间: 2019-06-23 17:47:44
n = int(input()) w = list(map(int, input().split())) w.sort(reverse=True) # print(w) print(sum(w[i] >= i for i in range(len(w))))