#include #include void leeEntrada( int *dN ) { FILE *input = fopen( "input.txt", "rt" ); int n, k; fscanf( input, "%d %d", &k, &n ); *dN = n-k; fclose( input ); } void imprimeSalida( int horas ) { FILE *output = fopen( "output.txt", "wt" ); fprintf( output, "%d", horas ); fclose( output ); } int main() { int distancia; //Leemos la distancia (diferencia entre la gasolinera y el hotel) leeEntrada( &distancia ); //Buscamos el mayor par de n'umeros triangulares consecutivos de tal forma //que la suma de ambos sea lo menor que la distancia... es decir, //k*(k+1)/2 + k*(k-1)/2 <= dist <===> k <= sqrt(dist) //Por lo que sacamos ra'iz cuadrada a la distancia, para tener k. int k = (int)sqrt( distancia ); //Tomamos el caso extremo en el que los triangulares no alcanzan. if( distancia <= 3 ) imprimeSalida( distancia ); //Si el n'umero k*k es menor que la distancia //quiere decir que necesitamos k + k-1 horas m'as algunas horas para el resto //del recorrido, esto lo sacamos con la diferencia y dividiendo entre k. //(Parte entera por arriba, pues queremos saber cu'antas horas extras necesitamos). else if( k*k < distancia ) imprimeSalida( 2*k - 1 + (int)ceil( (distancia-k*k)/(double)k ) ); //Si k*k es igual que la distancia //quiere decir que necesitamos exactamente k + k-1 else imprimeSalida( 2*k-1 ); return 0; }