Cod sursa(job #916720)

Utilizator Cosmin_NTGIonita Cosmin Cosmin_NTG Data 16 martie 2013 20:15:37
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include<fstream>
#include<iostream>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");

int  i, G, W, *EN = new int [1002], *CST = new int [1002], *v = new int[1001], k=1, *SEN = new int(0), *SCST = new int(0);

void quicksort(int left, int right, int x[])
{
    int i,j,mid,aux;
    i = left;
    j = right;
    mid = x[(left+right)/2];
    while(i<=j)
    {
        while(x[i]<mid)
          i++;
        while(x[j]>mid)
          j--;
        if(i<=j)
        {
            aux = x[i];
            x[i] = x[j];
            x[j] = aux;

            aux = EN[i];
            EN[i] = EN[j];
            EN[j] = aux;

            i++;
            j--;
        }
    }
    if(i<right)
    {
        quicksort(i, right, x);
    }
    if(j>left)
    {
        quicksort(left, j, x);
    }
}

void Split(void)
{
    for(i=1; i<=2*G; i=i+2)
    {
        EN[k] = v[i];
        CST[k] = v[i+1];
        k++;
    }
    delete [] v;
}

int main()
{
    f>>G;
    f>>W;
    int  *dyn_sum = new int;


    *dyn_sum = 0;

    for(i=1; i<= G*2; i++)
    {
        f>>v[i];
    }

    for(i=1; i<=G*2; i = i + 2)
    {
         *dyn_sum = *dyn_sum + v[i];
         if(v[i] == W)
          {
               g<<v[i+1]<<" ";
               f.close();
               g.close();
               return 0;
          }
    }
    if(*dyn_sum < W)
    {
        delete dyn_sum;
        g<<-1;
        f.close();
        g.close();
        return 0;
    }
    else{
            Split();
            quicksort(1, G, CST);
            for(i=1; i<=G; i++)
            {
                *SEN = *SEN + EN[i];
                *SCST = *SCST + CST[i];
                if(*SEN>=W)
                {
                    delete [] EN;
                    delete [] CST;
                    delete SEN;
                    g<<*SCST<<"\n";
                    delete SCST;
                    f.close();
                    g.close();
                    return 0;
                }
            }


    }
}