Cod sursa(job #1249172)

Utilizator VladutZ94FMI Chichirau Vlad Vasile VladutZ94 Data 26 octombrie 2014 17:13:34
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <cstdio>

using namespace std;

 

int v[1000],k,n,x;

int sum=0;

int l,d;

bool ok=false;

int minim=99999999;  //valoarea minimului

 

int transport;

 

void citire()

{

    freopen("transport.in","r",stdin);

    scanf("%d%d",&n,&k);

    for(int i=1;i<=n;i++)

    {

        scanf("%d",&v[i]);

        sum+=v[i];

    }

    l=sum/n;

    d=sum;

}

 

void verificare()   //trimit prin x valoarea

{

    int s=0;

    transport=1;

    for(int i=1;i<=n;i++)

        if(s+v[i]<=x)

            s=s+v[i];

        else

        {

            transport++;

            s=0;

            i--;

        }

    if(transport==k)

        if(minim>x)

        {

            minim=x;

            ok=false;     // ok e false daca minimul se modifica

        }

        else

            ok=true;

    if(transport<=k)

        d=x;

    else

        l=x;

}

 

void rezolvare()

{

    while(ok==false||l==d)    //cat timp n-am gasit solutia

    {

        x=(l+d)/2;

        verificare();

    }

}

 

int main()

{

    citire();

    rezolvare();

    freopen("transport.out","w",stdout);

    printf("%d",x);

    return 0;

}