Tout d'abord, lorsque vous voyez N (≤10 ^ 5), vous devez penser que cette question ne peut pas être violente et qu'elle va définitivement s'arrêter.
Triez d'abord les données de distance, puis ouvrez une table de hachage, par exemple, hash [i] stocke le nombre de jours supérieur à i kilomètres.
Ensuite, commencez à énumérer à partir de n et affichez le premier nombre qui correspond au nombre d'Eddington.
Faites attention à l'erreur à 3 segments du point de test: parce que le titre dit seulement que n est inférieur à 10 ^ 5, et ne donne pas la plage de distance, la table de hachage n'est donc ouverte qu'à la 5e puissance de 10, il sera une erreur de segment, essayez de l'agrandir autant que possible.
#include <cstdio>
#include <algorithm>
using namespace std;
int hashTable[1001000] = {
0};
int main(){
int n;
scanf("%d", &n);
int arr[n];
for(int i=0; i<n; i++){
scanf("%d", &arr[i]);
}
sort(arr, arr+n);
if(arr[0] > n){
printf("%d", n);
return 0;
}
int num = 0;
for(int i=0; i<n; i++){
hashTable[arr[i]] = i + 1;
}
for(int i=1; i<1001000; i++){
if(hashTable[i] == 0){
hashTable[i] = hashTable[i-1];
}
}
for(int i=n; i>=0; i--){
int day = n - hashTable[i];
if(day >= i){
printf("%d", i);
break;
}
}
return 0;
}