Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.50 KB | None | 0 0
  1.  
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5.  
  6. #define ERRO 0.000005
  7. #define COMPARE(a, b) (((a) > (b)) - ((a) < (b)))
  8.  
  9. int compare (const void * a, const void * b){
  10.   double fa = *(const double*) a;
  11.   double fb = *(const double*) b;
  12.   return  (fa < fb) - (fa > fb);
  13. }
  14.  
  15. double procura(int area, double tira[], int n, double inicio, double fim) {
  16.     int i;
  17.     double corte = (fim + inicio) / 2.0, areaCorte = 0;
  18.    
  19.     for(i = 0; i < n; i++) {
  20.         if( (double)tira[i] > corte) {
  21.             areaCorte += ( tira[i] - corte);
  22.         }
  23.     }
  24.  
  25.     if(fim - inicio < ERRO) {
  26.         return corte;
  27.     } else if(areaCorte > (double)area) {
  28.         return procura(area, tira, n, corte, fim);
  29.     } else {
  30.         return procura(area, tira, n, inicio, corte);
  31.     }
  32. }
  33.  
  34. int main() {
  35.   int qtd, area;
  36.  
  37.   scanf("%d %d", &qtd, &area);
  38.  
  39.   while( qtd != 0 && area != 0 ) {
  40.     int temp =0;
  41.     double soma=0;
  42.     double vet[100010];
  43.     double maior= -1.0;
  44.     int i;
  45.  
  46.     for(i=0; i<qtd; i++){
  47.  
  48.         scanf("%d", &temp);  
  49.         vet[i] = (double) temp;
  50.         soma += vet[i];
  51.  
  52.         if(vet[i] > maior){
  53.             maior = vet[i];
  54.         }
  55.  
  56.     }
  57.  
  58.     if(soma < (double) area){
  59.         printf("-.-\n");
  60.     }else if(soma == (double) area){
  61.         printf(":D\n");
  62.     }else{
  63.         qsort(vet, qtd, sizeof(double), compare);
  64.         printf("%.4f\n", procura(area, vet, qtd, 0.0, maior) );
  65.     }
  66.  
  67.     scanf("%d %d", &qtd, &area);
  68.  
  69.   }
  70.  
  71.   return 0;
  72.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement