Skip to content

Instantly share code, notes, and snippets.

@rogerioagjr
Created May 10, 2015 18:25
Show Gist options
  • Save rogerioagjr/c477094e61908cfbdfda to your computer and use it in GitHub Desktop.
Save rogerioagjr/c477094e61908cfbdfda to your computer and use it in GitHub Desktop.
Abastecendo o Posto
#include <cstdio>
#include <algorithm>
#define MAXN 100100
using namespace std;
struct gas{ double preco, estoq; }; // declaro a struct gas
bool compara(gas x, gas y){ return x.preco < y.preco; } // declaro a bool compara
gas forn[MAXN]; // crio um array de gas de nome "forn" para representar a lista
// declaro as variáveis que vou usar
int n;
double d, custo;
int main(){
scanf("%d %lf", &n, &d); // leio os valores de n e d
// leio o preço e eo estoque de cada fornecedor
for(int i=1; i<=n; i++) scanf("%lf %lf", &forn[i].preco, &forn[i].estoq);
// ordeno o veotor de gas
sort(forn+1, forn+n+1, compara);
// percorro o vetor
for(int i=1; i<=n; i++){
// o fornecedor davez será o que estou olhando no vetor, no momento
gas davez=forn[i];
// se todo o seu estoque não consegue preencher o que ainda preciso
if(davez.estoq<d){
custo+=davez.estoq*davez.preco; // somo a custo o valor de comprar todo o estoque
d-=davez.estoq; // e subtraio de d o litros que comprei
}
// caso contrário, ou seja, dá pra encher tudo só com esse fornecedor
else{
custo+=d*davez.preco; // somo acusto o valor de comprar o que preciso
d=0; // zero a quantidade que a inda falta comprar
break; // e paro de percorrer o vetor, pois já comprei o que precisava
}
}
// se o loop acabar e ainda houver alguma quantidade em d
if(d) printf("Impossivel\n"); // então não foi possível comprar tudo o que precisava
// caso contrário, foi possível
else printf("%.2lf\n", custo); // e imprimo o valor gasto na compra
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment