题目
https://pintia.cn/problem-sets/994805342720868352/problems/994805354762715136
题意
找出满足有E天骑车超过E公里的最大整数E
代码解析
先将数组从1到n降序排序,按照样例排序后的结果为:
下标 (i) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
数值 | 10 | 9 | 8 | 8 | 7 | 7 | 6 | 6 | 3 | 2 |
然后开始找规律,有i天骑车超过a[i]-1公里
,比如i=4就意味着有4天骑车超过8-1=7公里,i=5就意味着有5天骑车超过7-1=6公里
因为有E天骑车超过E公里和有E天骑车超过E+1公里都可以满足要求(因为超过E+1一定也超过E),但有E天骑车超过E-1公里就不满足(因为超过E-1不一定超过E,如果这E天至少有一天骑车的公里数正好是E,就不满足有E天骑车超过E公里的要求)
所以得出结论,超过的公里数要大于等于天数时符合要求,即a[i]-1>=i。如果想要这个数最大,那就在i增加的过程中找到第一个不符合要求的i,此时i-1即为所求。如果都满足,输出n即可
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n+1];
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1,greater<int>());
for(int i=1;i<=n;i++)
{
if(a[i]-1<i)
{
cout<<i-1;
return 0;
}
}
cout<<n;
}