Advertisement
Guest User

Untitled

a guest
Apr 5th, 2020
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.90 KB | None | 0 0
  1. int main(){
  2.         int i = 0, j = 0, quant = 0, dist = 0;
  3.         scanf("%d %d", &quant, &dist);
  4.  
  5.         if((quant < 1 && quant > 1000) && (dist < 1 && dist > 1000000)){
  6.                 return 0;
  7.         }
  8.  
  9.         int endDist = dist;
  10.         int endQ = quant;
  11.         double upper = 1000.00;
  12.         double down = 0;
  13.         double *speed = (double*)calloc(endQ, sizeof(double));
  14.         double *dista = (double*)calloc(endQ, sizeof(double));
  15.  
  16.         while(!(i >= endQ)){
  17.  
  18.                 j = i;
  19.                 scanf("%lf %lf", &dista[j], &speed[i]);
  20.  
  21.  
  22.                 i++;
  23.         }
  24.  
  25.         i = 0;
  26.         j = 0;
  27.  
  28.         if(1 == endQ){
  29.                 double temp = (double)dista[0] / dist;
  30.                 double end = temp - speed[0];
  31.                 printf("%.9lf\n", end);
  32.                 free(speed);
  33.                 free(dista);
  34.         }
  35.  
  36.         upper = upper * 2;
  37.         //upper = 2000.00;
  38.         down = speed[0];
  39.         long double tm = 0;
  40.         int k = 0;         
  41. while(k < endQ){
  42.                 if(speed[j] < down)
  43.                         down = speed[j];
  44.                 k++;
  45.         }
  46.  
  47.         double ddown = down * -1;
  48.         i = 0;
  49.         if(upper != 2000.00)
  50.         {
  51.                 return 0;
  52.         }
  53.  
  54.         double temp = 0;
  55.         double mid = 0;
  56.         while(i < 75){
  57.  
  58.                 tm = 0;
  59.                 temp = upper + ddown;
  60.                 mid = temp / 2;
  61.                 j = 0;
  62.                 while((j < endQ)){
  63.                         tm = tm + ((double)dista[j]/(double)(speed[j] + mid));
  64.  
  65.                         j++;
  66.                 }
  67.  
  68.                 if(endDist < tm){
  69.                         ddown = mid;
  70.                 } else{
  71.                         upper = mid;
  72.                 }
  73.  
  74.                 i++;
  75.         }
  76.  
  77.         printf("%.9lf\n", mid);
  78.  
  79.         free(speed);
  80.         free(dista);
  81.         return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement