PAT B1060 Número de Eddington (25 puntos)

Inserte la descripción de la imagen aquí
En primer lugar, cuando vea N (≤10 ^ 5), debe pensar que esta pregunta no puede ser violenta y definitivamente terminará el tiempo de espera.
Ordene primero los datos de distancia y luego abra una tabla hash; por ejemplo, hash [i] almacena el número de días mayor que i kilómetros.
Luego comience a enumerar desde n, y genere el primer número que coincida con el número de Eddington.
Preste atención al error de 3 segmentos del punto de prueba: debido a que el título solo dice que n es menor que 10 ^ 5, y no da el rango de distancia, la tabla hash solo se abre a la quinta potencia de 10, allí será un error de segmento, intente ampliarlo tanto como sea posible.

#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;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45964844/article/details/113746116
Recomendado
Clasificación