Cod sursa(job #1549368)

Utilizator Belu99Bibo Bela Belu99 Data 12 decembrie 2015 11:46:37
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
using namespace std;
int i,G,W,mi=10001,q=0,j,a,b,k=0,ok=1;
long e[1001],c[1001];
int main()
{
    ifstream f("energii.in");
    ofstream g("energii.out");
    f>>G;
    f>>W;
    e[0]=c[0]=0;
    for(i=1;i<=G;i++)
    {
        f>>a;
        f>>b;
        if(a>=W)
        {
            if(b<mi)
            {
                mi=b;
                k=1;
            }
        }
         else
         {
             q++;
             e[q]=e[q-1]+a;
             c[q]=c[q-1]+b;
         }
    }
    if(e[q]>=W)
    {
        for(i=1;i<q;i++)
        {
            for(j=i+1;j<=q;j++)
                if((e[j]-e[i-1])>=W and (c[j]-c[i-1])<mi)
                    mi=c[j]-c[i-1];
            for(ok=2;ok<=q-i;ok++)
            {
                for(j=i+ok;j<=q;j++)
                if((e[j]-e[i-1]-e[j-1]+e[i])>=W and (c[j]-c[i-1]-c[j-1]+c[i])<mi)
                    mi=c[j]-c[i-1];
                for(j=i+ok;j<=q;j++)
                    if((e[j]-e[i-1]-e[i+ok-1]+e[i])>=W and (c[j]-c[i-1]-c[i+ok-1]+c[i])<mi)
                    mi=c[j]-c[i-1]-c[i+ok-1]+c[i];
                 for(j=i-ok;j>=1;j--)
                    if((e[j]-e[i-1]-e[i-ok-1]+e[i-1])>=W and (c[j]-c[i-1]-c[i-ok-1]+c[i-1])<mi)
                    mi=c[j]-c[i-1]-c[i-ok-1]+c[i-1];
            }
        }
        g<<mi;
    }
    else
        {
            if(k==1)
                g<<mi;
            else
                g<<-1;
        }
    return 0;
}