Cod sursa(job #1247602)

Utilizator VladutZ94FMI Chichirau Vlad Vasile VladutZ94 Data 23 octombrie 2014 00:12:10
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>

using namespace std;

int v[1000],k,n,x;
int sum=0;
int l,d;
bool ok=false;
int minim=0;  //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;
}