Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #define ERRO 0.000005
- #define COMPARE(a, b) (((a) > (b)) - ((a) < (b)))
- int compare (const void * a, const void * b){
- double fa = *(const double*) a;
- double fb = *(const double*) b;
- return (fa < fb) - (fa > fb);
- }
- double procura(int area, double tira[], int n, double inicio, double fim) {
- int i;
- double corte = (fim + inicio) / 2.0, areaCorte = 0;
- for(i = 0; i < n; i++) {
- if( (double)tira[i] > corte) {
- areaCorte += ( tira[i] - corte);
- }
- }
- if(fim - inicio < ERRO) {
- return corte;
- } else if(areaCorte > (double)area) {
- return procura(area, tira, n, corte, fim);
- } else {
- return procura(area, tira, n, inicio, corte);
- }
- }
- int main() {
- int qtd, area;
- scanf("%d %d", &qtd, &area);
- while( qtd != 0 && area != 0 ) {
- int temp =0;
- double soma=0;
- double vet[100010];
- double maior= -1.0;
- int i;
- for(i=0; i<qtd; i++){
- scanf("%d", &temp);
- vet[i] = (double) temp;
- soma += vet[i];
- if(vet[i] > maior){
- maior = vet[i];
- }
- }
- if(soma < (double) area){
- printf("-.-\n");
- }else if(soma == (double) area){
- printf(":D\n");
- }else{
- qsort(vet, qtd, sizeof(double), compare);
- printf("%.4f\n", procura(area, vet, qtd, 0.0, maior) );
- }
- scanf("%d %d", &qtd, &area);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement