Cod sursa(job #1018303)

Utilizator edihackpackEdi Pop edihackpack Data 29 octombrie 2013 11:38:02
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#include <algorithm>
struct c
{
    int energie,cost;
    float raport;
} costuri[1001];

void sortare(int f, int l)
{
    float pivot = costuri[(f+l)/2].raport;
    int i = f;
    int j = l;
    while(i<=j)
    {
        while(costuri[i].raport > pivot)
            i++;
        while(costuri[j].raport<pivot)
            j--;
        if(i<=j)
        {
            c aux = costuri[i];
            costuri[i] = costuri[j];
            costuri[j] = aux;
            i++;
            j--;
        }
    }
    if(j>f)
        sortare(f,j);
    if(i<l)
        sortare(i,l);

}

int main()
{
    int g, w;
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    scanf("%d",&g);
    scanf("%d",&w);
    for(int i =0; i<g; i++)
    {
        scanf("%d%d",&costuri[i].energie,&costuri[i].cost);
        costuri[i].raport = (costuri[i].energie*1.0)/costuri[i].cost;
    }
    sortare(0,g-1);
    int energ = 0,cost =0 ;
    for(int i =0; i<g; i++)
    {
        energ+=costuri[i].energie;
        cost+=costuri[i].cost;
        if(energ>=w)
        {
            printf("%d",cost);
            break;
        }
    }
    printf("%d",-1);
}