Cod sursa(job #494989)

Utilizator chibicitiberiuChibici Tiberiu chibicitiberiu Data 23 octombrie 2010 16:40:25
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#define DEBUG 0

#include <fstream>

#if DEBUG == 1
#include <iostream>
#endif


#define Enough(i) (i >= W)

using namespace std;

int G, W;

struct ASK {
    int Energ, Cost;
} *F;

int compare (const void* a, const void* b)
{
    ASK *aa, *bb;
    aa = (ASK *) a;
    bb = (ASK *) b;

    return aa->Cost - bb->Cost;
}

int main()
{
    ifstream in ("energii.in");
    ofstream out ("energii.out");

    in>>G>>W;
    F = new ASK[4*G*G];

    in>>F[0].Energ>>F[0].Cost;

    for (int i=1; i < G; i++) {
        in>>F[i].Energ>>F[i].Cost;
    }

    int Wh=G;
    for (int i=G-1; i >= 0; i--)
        for (int j=i-1; j >= 0; j--, Wh++)
        {
            F[Wh].Energ = F[i].Energ + F[j].Energ;
            F[Wh].Cost = F[i].Cost + F[j].Cost;
        }

#if DEBUG == 1
    cout<<"Array is now: ";
    for (int i=0; i < Wh; i++)
        cout<<"\n\r<item="<<i<<" energ="<<F[i].Energ<<" cost="<<F[i].Cost<<">";
    cout<<endl<<endl;
#endif

    qsort(F, Wh, sizeof(ASK), compare);

#if DEBUG == 1
    cout<<"Array is now: ";
    for (int i=0; i < Wh; i++)
        cout<<"\n\r<item="<<i<<" energ="<<F[i].Energ<<" cost="<<F[i].Cost<<">";
    cout<<endl<<endl;
#endif

    int i;
    for (i=0; i < Wh; i++)
        if (F[i].Energ >= W)
        {
            #if DEBUG == 1
            cout<<"Cost total: "<<F[i].Cost<<", energie generata: "<<F[i].Energ<<"\\"<<W;
            #endif
            out<<F[i].Cost; break;
        }

    #if DEBUG == 1
    if(i == Wh) cout<<"Imposibil.";
    cout<<endl<<endl;
    #endif
    if(i == Wh) out<<-1;


    in.close(); out.close();
    delete[] F;

    return 0;
}